zoukankan      html  css  js  c++  java
  • oracle备份恢复之recover database的四条语句区别

    1  recover database using backup controlfile
    2  recover database until cancel
    3  recover database using backup controlfile until cancel;
    4  recover database until cancel using backup controlfile;

    本文主要介绍以下四种恢复方式的含义与区别:
     
    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) ...

    结果如下:
    如果控制文件丢失,restore备份的控制文件后,则必须使用using backup controlfile选项。而until cancel则是不完全恢复,即current/active redo丢失,或者从restore数据库后某个归档文件缺失,则终止。

    结论:
    1、适用于restore旧的控制文件,且归档日志和cuurrent/active redo都没有丢失情况。如果一切归档日志和在线日志完好,可以不丢失数据。类似于recover database
    2、当前控制文件未丢失(不需要restore旧的控制文件),此时有归档日志或者current/active log有丢失情况下,则终止。最大可能恢复数据
    3、4:我在oracle 10.2.0.4环境下测试效果是相同的,即适用于restore旧的控制文件,在恢复到控制文件备份那刻后,系统会提示应用控制文件备份后的归档日志,如果没有则停止。也是最大可能的恢复数据。

    可以得出结果,如果有旧的数据库备份,在归档日志和在线日志全部保存完好的情况下,使用recover database或recover database using backup controlfile。则不丢失数据
    如果存在备份数据文件restore后,归档日志或者在线日志(active、current)丢失情况下,则可以恢复到丢失的前一个归档日志

    until cancel就是不完全恢复
    需要alter database open resetlogs
    数据库打开后需要理解做一个全库备份

    在线日志文件丢失:

    如果正常关闭数据库,然后启动时报错:

    SQL> alter database open;
    alter database open
    *
    第 1 行出现错误:
    ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员
    ORA-00312: 联机日志 1 线程 1:
    'C:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'


    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    第 1 行出现错误:
    ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效


    SQL> recover database until cancel;
    完成介质恢复。
    SQL> alter database open resetlogs;

    数据库已更改。

  • 相关阅读:
    .NET XmlNavigator with Namespace
    编程要素
    【FOJ】1962 新击鼓传花游戏
    【POJ】1389 Area of Simple Polygons
    【POJ】2482 Stars in Your Window
    【HDU】3265 Posters
    【HDU】1199 Color the Ball
    【HDU】3642 Get The Treasury
    【HDU】4027 Can you answer these queries?
    【HDU】1542 Atlantis
  • 原文地址:https://www.cnblogs.com/hftian/p/9324008.html
Copyright © 2011-2022 走看看