有alter database open resetlogs之前的冷备,resetlogs之后没有备份,现某个数据文件丢失,但有当前控制文件。请问能否恢复数据。常理,resetlogs之后是要备份的,之前的archivelog不可用。但理论上是可以恢复的,oracle有个恢复的不建议做法。但我没试成功,请高手指点。resetlogs 时的 change scn 已经查到。谢谢
调试欢乐多
先启动数据库再说
但数据啊,数据就没了?
你先把备份的数据库恢复回来,然后使用下面的方法试SVRMGRL
SVRMGRL>CONNECT INTERNAL
SVRMGRL>STARTUP MOUNT
SVRMGRL>RECOVER DATABASE UNTIL CHANGE SCN;--查到的SCN号
SVRMGRL>ALTER DATABASE OPEN RESETLOGS;
基本原理是,用open resetlogs前的备份恢复(要用原来的控制文件和归档日志文件),恢复完后再用open resetlogs后的控制文件和归档日志文件来做第二次恢复。
第一次恢复后的数据库可以算是open resetlogs后的备份。
也就是说你原来的控制文件和归档日志文件必须还在才能恢复。
alter database open resetlogs
RESETLOGS after complete recovery through change 66512SQL> startup
ORACLE instance started.Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: 'O:\ORACLE\ORADATA\LEEGLE\SYSTEM01.DBF'
SQL> recover database using backup controlfile until change 66512;
ORA-00279: change 66180 generated at 05/06/2004 10:23:13 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_65.1
ORA-00280: change 66180 for thread 1 is in sequence #65
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 66383 generated at 05/08/2004 16:09:53 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_66.1
ORA-00280: change 66383 for thread 1 is in sequence #66
ORA-00278: log file 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_65.1' no longer
needed for this recovery
ORA-00279: change 66389 generated at 05/08/2004 16:10:09 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_67.1
ORA-00280: change 66389 for thread 1 is in sequence #67
ORA-00278: log file 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_66.1' no longer
needed for this recovery
ORA-00279: change 66433 generated at 05/08/2004 16:11:49 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_68.1
ORA-00280: change 66433 for thread 1 is in sequence #68
ORA-00278: log file 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_67.1' no longer
needed for this recovery
ORA-00279: change 66446 generated at 05/08/2004 16:12:27 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_69.1
ORA-00280: change 66446 for thread 1 is in sequence #69
ORA-00278: log file 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_68.1' no longer
needed for this recovery
ORA-00279: change 66451 generated at 05/08/2004 16:12:34 needed for thread 1
ORA-00289: suggestion : O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_70.1
ORA-00280: change 66451 for thread 1 is in sequence #70
ORA-00278: log file 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_69.1' no longer
needed for this recovery
ORA-00308: cannot open archived log 'O:\ORACLE\ORADATA\LEEGLE\ARCHIVE\ARC_70.1'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。(当前归档文件就只到69号,这个提示是正常的。)SQL> select checkpoint_change# from v$database;CHECKPOINT_CHANGE#
------------------
66512SQL> alter database open resetlogs;Database altered.
2、以上表明RESETLOGS之前恢复正常。SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.3、用RESETLOGS之后的当前控制文件恢复,有问题。
SQL> startup
ORACLE instance started.Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
ORA-01190: controlfile or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: 'O:\ORACLE\ORADATA\LEEGLE\SYSTEM01.DBF'
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01190: controlfile or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: 'O:\ORACLE\ORADATA\LEEGLE\SYSTEM01.DBF'4、不能正常下去,不知错误在哪,请指点。
第一次恢复后的数据库可以算是open resetlogs后的备份??
resetlogs之后的scn已经置0了。
但控制文件和数据文件的scn还是不一致,是吗?
问题怀疑在resetlogs之后的change#和archive 1# log之间change#的衔接,但我已经恢复到until change 66512(resetlogs之时的change#)了,还是有问题,请高手指点。
关键是要resetlogs之后的数据,就因resetlogs之后没有立刻冷备,所以才这样周折。
第一次恢复后的数据库可以算是open resetlogs后的备份??
resetlogs之后的scn已经置0了。
但控制文件和数据文件的scn还是不一致,是吗?
问题怀疑在resetlogs之后的change#和archive 1# log之间change#的衔接,但我已经恢复到until change 66512(resetlogs之时的change#)了,还是有问题,请高手指点。所以第一次恢复用的是原来的控制文件,第二次是用resetlogs之后的控制文件。
你可以看看这个帖子,里面讨论的很详细。
http://www.itpub.net/showthread.php?s=&threadid=110555&highlight=resetlogs
SQL> startup
ORACLE instance started.Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
ORA-01190: controlfile or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: 'O:\ORACLE\ORADATA\LEEGLE\SYSTEM01.DBF'
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01190: controlfile or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: 'O:\ORACLE\ORADATA\LEEGLE\SYSTEM01.DBF'我是用resetlogs之后的控制文件恢复的。按理,recover database应该能够进行的。可还是下不去。我重建controlfile,用recover database using backup controlfile until cancel;还是不能恢复,提示错误一样。
还在研究中……
http://www.itpub.net/showthread.php?s=&threadid=110555&highlight=resetlogs
文档很有用,谢谢JiangHua0903(爬爬虫) 。