Reuse noresetlogs:
一般用于控制文件损坏,但是redo file完好的情况下,重建控制文件的方式。
Reuse resetlogs:
一般用于重建控制文件,同时redo file遭到破坏的情况下,用此参数创建控制文件后,最后必须以alter database open resetlogs打开数据库。
IXDBA.NET社区论坛
Set resetlogs:
一般用于数据库异常关闭,重建控制文件,同时redo file遭到破坏的情况下,用此参数创建控制文件后,最后必须以alter database open resetlogs打开数据库。
重建控制文件的时候,使用noresetlogs方式 创建的控制文件中scn是从redo log中获得,使用resetlogs方式 创建的控制文件中scn是从datafile中获得。
因此,利用noresetlogs方式创建的控制文件,在数据库恢复的时候无需手动指定恢复日志,oracle会根据从redo file中读取的scn自动完成恢复,我们只需执行recover database,oracle来自动完成恢复。
利用resetlogs方式创建控制文件,其实就是告诉oracle,“我的redo file有问题了,不能完成恢复,于是oracle在创建控制文件的时候直接从现有的数据文件读取每个数据文件的scn,数据文件信息也到此为止了,不能继续向下恢复了”,因此,oracle在打开数据库时刻会清空所有redo file日志文件,redo file seq从0重新开始.
有时我们在数据文件丢失后,没有直接去创建控制文件,而是拿备份的控制文件进行恢复,此时在恢复的时候,oracle恢复进程会首先读取每个数据文件的scn,其实也就是 on low rba,并且恢复到此处为止,此时oracle会自动去应用归档日志,归档应用完毕,oracle自动恢复停止,此时恢复到了每个数据文件的scn值。
但是要做到完全恢复,这些还是不够的,因为还有部分数据操作仍在redo file中,这些操作记录可能还没有写入数据文件。此时如果redo损坏,就不能完全恢复数据,如果所有redo完好,要手动指定redo file,具体指定哪个,可以一个一个去试,直到完成完全恢复。
类似操作如下:
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25546853 (? 03/20/2003 11:51:40 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00002.001
ORA-00280: ?? 25546853 ???? 1 ???? # 2 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'
ORA-00310: ???????? 1????? 2
ORA-00334: ????: 'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25546853 (? 03/20/2003 11:51:40 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00002.001
ORA-00280: ?? 25546853 ???? 1 ???? # 2 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
其实不建议用老的控制文件恢复数据就是由于还要手工指定恢复文件redo file,最后还要resetlogs 打开数据库。