失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 数据库文件备份与恢复案例

数据库文件备份与恢复案例

时间:2020-05-15 21:55:37

相关推荐

数据库文件备份与恢复案例

数据库各种文件丢失恢复大全

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

如果觉得《数据库文件备份与恢复案例》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。