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;

    数据库已更改。

  • 相关阅读:
    Python趣味小问题——用积分思想计算圆周率
    通过自动化测试发现缺陷
    Xcodebuild稳定性测试go脚本
    Google软件测试之道笔记与总结
    PHP打印日志类
    Python3用多线程替代for循环提升程序运行速度
    卡死进程检杀工具
    ECharts饼图自定义
    解决bootstrap-table表头filter-control select控件被遮挡显示不全的问题
    Html表格和表头文字不换行
  • 原文地址:https://www.cnblogs.com/hftian/p/9324008.html
Copyright © 2011-2022 走看看