有alter database open resetlogs之前的冷备,resetlogs之后没有备份,现某个数据文件丢失,但有当前控制文件。请问能否恢复数据。常理,resetlogs之后是要备份的,之前的archivelog不可用。但理论上是可以恢复的,oracle有个恢复的不建议做法。但我没试成功,请高手指点。resetlogs 时的 change scn 已经查到。谢谢

解决方案 »

  1.   

    alter database delete datafile ...
    先启动数据库再说
      

  2.   

    数据库启动没问题,offline 就可以启动了。
    但数据啊,数据就没了?
      

  3.   

    是哪个版本的数据库?
    你先把备份的数据库恢复回来,然后使用下面的方法试SVRMGRL
    SVRMGRL>CONNECT INTERNAL
    SVRMGRL>STARTUP MOUNT
    SVRMGRL>RECOVER DATABASE UNTIL CHANGE SCN;--查到的SCN号
    SVRMGRL>ALTER DATABASE OPEN RESETLOGS;
      

  4.   

    Oracle9i Enterprise Edition Release 9.2.0.1.0我试过了,open resetlogs 之后,shutdown immediate; 用当前的控制文件替换,alter database open, 提示控制文件和数据文件不符,一个是resetlogs前的,一个是resetlogs后的。下午我把错误贴出来。
      

  5.   

    在归档情况和一定条件下可以恢复。
    基本原理是,用open resetlogs前的备份恢复(要用原来的控制文件和归档日志文件),恢复完后再用open resetlogs后的控制文件和归档日志文件来做第二次恢复。
    第一次恢复后的数据库可以算是open resetlogs后的备份。
    也就是说你原来的控制文件和归档日志文件必须还在才能恢复。
      

  6.   

    1、用RESETLOGS前的原始备份和RESETLOGS前的控制文件恢复正常。alert.log中的记录
    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、不能正常下去,不知错误在哪,请指点。
      

  7.   

    to:JiangHua0903(爬爬虫)  
     
    第一次恢复后的数据库可以算是open resetlogs后的备份??
    resetlogs之后的scn已经置0了。
    但控制文件和数据文件的scn还是不一致,是吗?
    问题怀疑在resetlogs之后的change#和archive 1# log之间change#的衔接,但我已经恢复到until change 66512(resetlogs之时的change#)了,还是有问题,请高手指点。   
     
      

  8.   

    既然能打开数据库,为什么不马上EXP数据库呢?
      

  9.   

    exp没问题啊,但resetlogs之后的数据就没了啊。
    关键是要resetlogs之后的数据,就因resetlogs之后没有立刻冷备,所以才这样周折。
      

  10.   

    to:nowhappy() 
     
    第一次恢复后的数据库可以算是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
      

  11.   

    更正错误:resetlogs之后scn不置零,而是增加了resetlog_change#。但不明白为什么还有一下错误。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'我是用resetlogs之后的控制文件恢复的。按理,recover database应该能够进行的。可还是下不去。我重建controlfile,用recover database using backup controlfile until cancel;还是不能恢复,提示错误一样。
    还在研究中……
    http://www.itpub.net/showthread.php?s=&threadid=110555&highlight=resetlogs
    文档很有用,谢谢JiangHua0903(爬爬虫) 。