zoukankan      html  css  js  c++  java
  • Oracle

    一、概述

    本文将给大家介绍主库使用rman做不完全恢复后,备库如何通过flashback,继续同步

    二、正式实验

    本次实验采用的是oracle 11g 单实例 + oracle 11g 单实例dg

    1. dg的搭建(略)

    实验的前提条件是你已经有了一个正在同步的dg环境,关于dg如何搭建不在本文讨论范围内

    2. 打开dg的闪回功能

    SQL> alter system set db_recovery_file_dest_size = 4G;
    SQL> alter system set db_recovery_file_dest = '/u01/app/oracle/fast_recovery_area';
    
    # 需要先关闭mrp进程,才能打开dg闪回功能
    SQL> alter database recover managed standby database cancel;
    SQL> alter database flashback on;
    SQL> alter database recover managed standby database using current logfile disconnect from session;
    

    3. 主库进行备份

    RMAN> backup database;
    

    4. 主库查询scn

    SQL> select current_scn from v$database;   
    
    CURRENT_SCN
    -----------
         940486
    

    5. 主库做一系列的操作

    SQL> create table scott.test1 as select * from scott.emp;
    SQL> alter system switch logfile;
    SQL> create table scott.test2 as select * from scott.emp;
    SQL> alter system switch logfile;
    SQL> create table scott.test3 as select * from scott.emp;
    SQL> alter system switch logfile;
    SQL> create table scott.test4 as select * from scott.emp;   
    

    6. 主库还原恢复

    现在我要回退主库到scn 940486,将第5步中的操作全部回退

    SQL> shutdown immediate;
    SQL> startup mount;
    RMAN> restore database;
    RMAN> recover database until scn 940486;
    SQL> alter database open resetlogs;
    SQL> select resetlogs_change# from v$database;
    
    RESETLOGS_CHANGE#
    -----------------
               940487
    

    可以看到主库是回退到了940486,resetlogs的scn号是940487

    7. 观察dg的alert日志

    以下是dg的alert日志的节选

    Tue Aug 25 11:33:38 2020
    RFS[5]: Assigned to RFS process 1972
    RFS[5]: Selected log 23 for thread 1 sequence 1 dbid -1499891995 branch 1049369616
    RFS[5]: Standby in the future of new recovery destinationBranch(resetlogs_id) 1049369616
    Incomplete Recovery SCN: 941492
    Resetlogs SCN: 940487
    Flashback database to SCN 940486 to follow new branch
    Flashback database to SCN 940486 to follow new branch
    RFS[5]: New Archival REDO Branch(resetlogs_id): 1049369616  Prior: 1047566949
    RFS[5]: Archival Activation ID: 0xa6b56927 Current: 0xa69921e5
    RFS[5]: Effect of primary database OPEN RESETLOGS
    RFS[5]: Managed Standby Recovery process is active
    RFS[5]: Incarnation entry added for Branch(resetlogs_id): 1049369616 (dgorcltest)
    ...
    MRP0: Background Media Recovery process shutdown (dgorcltest)
    

    可以看到dg库已经知道主库做了resetlogs,也提示dg需要flashback才能继续同步。这里提示dg需要flashback到940486,也就是主库做不完全恢复的点,但实际测试下来,需要flashback更早一点才行,即940486-1=940485
    同时dg的mrp进程自动就shutdown了

    8. dg闪回

    SQL> flashback database to scn 940485;
    SQL> alter database open;
    SQL> alter database recover managed standby database using current logfile disconnect from session;
    

    9. 主库做修改

    SQL> create table scott.test5 as select * from scott.emp;
    SQL> alter system switch logfile;
    

    10. 从库查询

    SQL> select count(*) from scott.test5;                           
    
      COUNT(*)
    ----------
            14
    

    可以看到dg又正常同步主库了。

    三、总结

    从上面的例子可以看到
    940486 --> 主库不完全恢复的点
    940487 --> 主库resetlogs的点
    940485 --> dg闪回的点
    也就是dg必须闪回到主库不完全恢复的点的前面,dg闪回的点可以通过下面sql在主库中查询得到。

    SQL> select resetlogs_change#-2 from v$database;
    
    RESETLOGS_CHANGE#-2
    -------------------
                 940485
    
  • 相关阅读:
    MVC简介
    Scrapy中的item是什么
    Git删除文件操作
    vi编辑文件出现Can't open file for writing错误
    CentOs安装Scrapy出现error: Setup script exited with error: command ‘gcc’ failed with exit status 1错误解决方案
    Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    激活MyEclipse 6.5方法-通过一段Java程序生成激活码
    oninput,onpropertychange,onchange的用法和区别【转载】
    Myeclipse6.5项目启动时由于数据库连接失败的错误日志
    IE和Firefox的Javascript兼容性总结
  • 原文地址:https://www.cnblogs.com/ddzj01/p/13560040.html
Copyright © 2011-2022 走看看