数据库各种文件丢失恢复大全
SPFILE丢失:
模拟操作:
oracle>mvspfileora10g.oraspora10g.ora
oracle>rmantarget/;
rman>shutdownimmediate;
rman>startupnomount;
startupfailed:ORA-01078:failureinprocessingsystemparameters
LRM-00109:couldnotopenparameterfile'/home/oracle/product/10.20/dbs/initora10g.ora'
rman>setdbid3988862108;
rman>restorespfilefromautobackup;
执行该命令,如果没有找到的话,那可能是文件的路径发生错误.可以通过直接赋予它的文
件
rman>restorespfilefrom
'/u01/oracle/flash_recovery_area/ORA10G/autobackup/_12_09/o1_mf_s_673025706_4mw
7xc79_.bkp
在dbs/目录下产生spfileora10g.ora文件。证明spfile已经恢复好
rman>shutdownimmediate;
rman>startup;(如果该命令不能够启动数据库,那么需要setdbid3988862108)
controlfile丢失:
startupnomount;
restorecontrolfilefromautobackup;
alterdatabasemount;
recoverdatabase;
alterdatabaseopenresetlogs;
注意:在做了alterdatabaseopenresetlogs;会把onlineredelogfile清空,数据文件丢失.所以这
个时候要做一个全备份。
oracle>rm*.ctl
oracle>rmantarget/;//不能够连接到rman,因为controlfile丢失
oracle>sqlplus/nolog;
SQL>shutdownimmediate;//因为controlfile丢失,不能够正常shutdown
SQL>shutdownabort;
oracle>rmantarget/;
rman>startupnomount;
rman>restorecontrolfilefromautobackup;
rman>alterdatabasemount;
rman>alterdatabaseopenresetlogs;
RMAN-00571:===========================================================
RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
RMAN-00571:===========================================================
RMAN-03002:failureofalterdbcommandat12/09/16:21:13
ORA-01194:file1needsmorerecoverytobeconsistent
ORA-01110:datafile1:'/home/oracle/oradata/ora10g/system01.dbf
//出错,redolog的scn记录在controlfile里面的,因为我们有新的controlfile,所以需要
resetlogs;
/*
resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使
用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置
联机重做日志内容.
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间
差)。
*/
rman>recoverdatabase;
rman>alterdatabaseopenresetlogs;
Redologfile丢失:(下面的这些语句一定要在sqlplus中执行,不是在rman中执行)
(sqlplus/nolog)
1.shutdownimmediate;
2.startupmount;
3.recoverdatabaseuntilcancel;(mediarecovery)
4.alterdatabaseresetlogs;
数据文件丢失(在rman中执行sql语句,在sql后面用双引号括起来):
1.sql"alterdatabasedatafile3offline";
2.restoredatafile3
3.recoverdatafile3
4.sql"alterdatabasedatafile3online";
表空间丢失:
1.sql"altertablespaceusersoffline";//如果文件不存在,则用sql"altertablespaceusersoffline
immeidate";
2.restoretablespaceusers;
3.recovertablespaceusers;//与onlineredologfile信息一致
4.sql"altertablespaceusersonline";
非catalog方式完全恢复
数据库出现问题:
1.startupnomount;
2.restorecontrolfilefromautobackup;
3.alterdatabasemount;
4.restoredatabase;
5.recoverdatabase;
6.alterdatabaseopenresetlogs;
模拟操作:
oracleora10g>rm*;
oracleora10g>ls;
oracleora10g>//数据文件,控制文件全部删除
oracleora10g>rmantarget/;//因为controlfile丢失,不能够连接到rman
oracleora10g>sqlplus/nolog;
oracleora10g>connect/assysdba;
oracleora10g>shutdownabort;
oracleora10g>rmantarget/
rman>startupnomount;
rman>restorecontrolfilefromautabackup;
rman>alterdatabasemount;
rman>restoredatabase;
rman>recoverdatabase;//onlineredolog不存在
SQL>recoverdatabaseuntilcancel;//当redolog丢失,数据库在缺省的方式下,是不容许进行
recover操作的,那么如何在这种情况下操作呢
SQL>createpfilefromspfile;
vi/u01/product/10.20/dbs/initora10g.ora,在这个文件的最后一行添加
*.allow_resetlogs_corruption='TRUE';//容许resetlogcorruption
SQL>shutdownimmediate;
SQL>startuppfile='/u01/product/10.20/dbs/initora10g.ora'mount;
SQL>alterdatabaseopenresetlogs;
基于时间点的恢复:
run{
setuntiltime"to_date(07/01/0215:00:00','mm/dd/yyhh24:mi:ss')";
restoredatabase;
recoverdatabase;
alterdatabaseopenresetlogs;
}
ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';
1.startupmount;
2.restoredatabaseuntiltime"to_date('-7-1913:19:00','YYYY-MM-DDHH24:MI:SS')";
3.recoverdatabaseuntiltime"to_date('-7-1913:19:00','YYYY-MM-DDHH24:MI:SS')";
4.alterdatabaseopenresetlogs;
如果有openresetlogs,都是不完整恢复.
基于SCN的恢复:
1.startupmount;
2.restoredatabaseuntilscn10000;
3.recoverdatabaseuntilscn10000;
4.alterdatabaseopenresetlogs;
基于日志序列的恢复:
1.startupmount;
2.restoredatabaseuntilSEQUENCE100thread1;//100是日志序列
3.recoverdatabaseuntilSEQUENCE100thread1;
4.alterdatabaseopenresetlogs;
日志序列查看命令:SQL>select*fromv$log;其中有一个sequence字段.resetlogs就会把
sequence置为1
如果觉得《数据库文件备份与恢复案例》对你有帮助,请点赞、收藏,并留下你的观点哦!