写在前面:我是做实验删除控制文件,然后从备份集里恢复控制文件。打开的时候报错
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 02/20/2020 11:40:24
ORA-01190: control file or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: '/ooradata/system01.dbf'
(当前控制文件是上一次RESETLOGS的, 决定用ADJUST_SCN来调整SCN. 这个需要设置_allow_resetlogs_corruption参数, 前面曾经设置过就无需再设置.)
本文主要介绍以下四种 恢复 方式的含义与区别:
recover database 或者 recover tablespace, recover datafile时
1 recover database using backup controlfile(用冷备份恢复情况)
如果丢失当前控制文件,用冷
备份的控制文件恢复的时候,用来告诉
oracle,不要以controlfile中的scn作为恢复的终点;
2. recover database until cancel (没有一致性停数据库:情况)
如果丢失current/active redo的时候,手动指定终点。
3. recover database using backup controlfile until cancel;(一致性停数据库:情况)
如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志, 可以实现最大的恢复, 恢复到我不想恢复为止;
4. recover database until cancel using backup controlfile;
如果丢失当前controlfile并且current/active redo都丢失,以旧的redo中的scn为恢复终点。因为没有应用归档日志,所以会丢失数据。
要理解recover database using backup controlfile,先理解 recover database,也就是说,不加using backup controlfile的情况。
在普通的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所纪录的SCN为准,利用archive log和 redo log的redo entry, 把相关的datafile的 block恢复到“ 当前controlfile所纪录的SCN”
而某些情况下,Oracle需要把数据恢复到比当前controlfile所纪录的SCN还要
靠后的位置(比如说,control file是backup controlfile , 或者 controlfile是根据trace create的。),这时候,就需要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。
这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel) ...
如果不加限制就要恢复到 当先联机日志的最大SCN
*上面都讨论的是终点, 恢复的 起点 的问题:
1、recover database 这个呢很简单,就是比对system表空间的启动SCN(v$datafile_header)和控制文件中记录的SCN(v$datafile),如果一直则不用恢复,不一致就从
system数据文件的启动SCN开始整体的恢复~~~ 也就是说用它的时候基本就是
控制文件比数据文件往后,然后
恢复到控制文件所记录的数据文件的SCN
2 recover database using backup controlfile 也是先从system的启动scn开始恢复,可以到昨天,前天(control>数据的)
recover database using backup controlfile; ----不加限制条件就要恢复到我的联机日志状态,否则我resetlogs打开数据库就报错:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/test/system01.dbf'
3 recover database using backup controlfile until cancel;
追新的数据文件的scn(control<数据) --------这句话就是:恢复到我不想恢复为止(我可以随意的用resetlogs打开数据库)
当前系统scn
select current_scn from v$database;
当前数据文件SCN,在控制文件中。
select name,checkpoint_change# from v$datafile;
数据文件头的scn也叫做数据文件的启动scn,
select name,checkpoint_change# from v$datafile_header;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959246/viewspace-2676565/ ,如需转载,请注明出处,否则将追究法律责任。