写在前面:我是做实验删除控制文件,然后从备份集里恢复控制文件。打开的时候报错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:24ORA-01190: control file or data file 1 is from before the last RESETLOGSORA-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打开数据库) 当前系统scnselect current_scn from v$database; 当前数据文件SCN,在控制文件中。select name,checkpoint_change# from v$datafile; 数据文件头的scn也叫做数据文件的启动scn,select name,checkpoint_change# from v$datafile_header;
