• (摘)DataGuard物理standby管理


    DataGuard物理standby管理 - 主备切换

      Dataguard的切换分为两种,switchover和failover。
      switchover一般用于数据库或硬件升级,这时只需要较短时间中断数据库访问,主备库的角色切换完成后,即可打开primary角色的备库来提供数据库访问。
      failover,主库已经无法使用,必须切换到备库,当备库failover切换为primary,则主库不再是dataguard的一部分,无法再转换为备库。
      如果是RAC的物理standby,则在执行切换时只能启动一个instance,切换完毕后再启动其他实例。

    Switchover

      一定要按照先主库,后备库的顺序执行切换命令,否则会报错,如果强行切换就变成failover了。

    主库端:
      由于主库是处于open状态,有访问的,所以v$database视图中,switchover_status为sessions active。而由primary切换到standby需要数据库为open状态,因此,执行切换命令时,带上with session shutdown选项即可。
      执行完切换命令后,关闭数据库,重新启动数据库到mount状态等待日志传输,开启日志应用。
      查看alert.log可以看到主库做了哪些动作:主库断开所有session(未提交事务会回滚),切换日志并归档,传输日志到备库,给备库一个End-Of-REDO的信号,切换为standby,重新启动到mount。

    SYS@dev01> select database_role,switchover_status from v$database;

    DATABASE_ROLE   SWITCHOVER_STAT
    --------------- ---------------
    PRIMARY         SESSIONS ACTIVE

    SYS@dev01> alter database commit to switchover to physical standby with session shutdown;

    Database altered.

    SYS@dev01> shutdown immediate;
    ORA-01507: database not mounted

    ORACLE instance shut down.
    SYS@dev01> startup mount;
    ORACLE instance started.

    Total System Global Area  536870912 bytes
    Fixed Size                  2085288 bytes
    Variable Size             209718872 bytes
    Database Buffers          318767104 bytes
    Redo Buffers                6299648 bytes
    Database mounted.

    SYS@dev01> alter database recover managed standby database using current logfile disconnect from session;

    Database altered.

    SYS@dev01> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PHYSICAL STANDBY SESSIONS ACTIVE

    SYS@dev01>

    备库端:
      确认是否可以切换为主库,如果switchover_status为recovery neededswitchover latent,需要apply完所有归档日志才能切换。如果是sessions active则带上with session shutdown选项。apply完所有日志后,即可切换为primary,然后打开数据库。
      查看alert.log可以看到备库做了哪些动作:接收主库日志,接收到主库End-Of-REDO的信号,apply完所有日志,清空online redo log以便打开数据库,切换为primary,打开数据库。

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PHYSICAL STANDBY SWITCHOVER LATENT

    SYS@dev01dg> alter database commit to switchover to primary with session shutdown;
    alter database commit to switchover to primary with session shutdown
    *
    ERROR at line 1:
    ORA-16139: media recovery required

    SYS@dev01dg> alter database recover managed standby database disconnect from session;

    Database altered.

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PHYSICAL STANDBY TO PRIMARY

    SYS@dev01dg> alter database commit to switchover to primary with session shutdown;

    Database altered.

    SYS@dev01dg> alter database open;

    Database altered.

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PRIMARY          SESSIONS ACTIVE

    SYS@dev01dg>

      以上过过程中,由于主库断开所有session并归档,传输日志到备库,发给备库End-Of-REDO的信号,因此正常switchover时,是不会丢失数据的。
      切换完成后可以在主库归档,验证一下是否切换成功,备库是否能正常接收日志。

    Failover
      当主库当掉,无法使用时,此时的切换即为failover,如果保护模式为最大性能模式,是可能丢失数据的。

    备库端:
      如果是最大保护和最大可用性模式,则可以直接在备库端执行failover切换。如果是最大性能模式,为了尽可能减少数据丢失,需要检查主库是否有日志没有传输到备库,手动传输备库进行注册和恢复。注意RAC环境下,归档日志是分线程的。

    SYS@dev01dg> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

       THREAD#          A
    ---------- ----------
             1        457

    SYS@dev01dg>

    [oracle@testdb dev01]$ scp * oracle@192.168.0.8:/u01/archive/dev01dg

      注册归档日志有如下两种方法,较为简单当然是用rman了,一次注册多个。
    RMAN> catalog start with '/u01/archive/dev01';

    SYS@dev01dg> alter database register logfile '/u01/archive/dev01dg/arch_e8fe6364_1_712757927_460.dbf';

      apply归档日志也有两种方法。

    SYS@dev01dg> alter database recover managed standby database disconnect from session;

    Database altered.

    SYS@dev01dg>

    SYS@dev01dg> recover standby database;
    ORA-00279: change 2863819 generated at 03/20/2010 21:58:17 needed for thread 1
    ORA-00289: suggestion : /u01/archive/dev01dg/arch_e8fe6364_1_712757927_461.dbf
    ORA-00280: change 2863819 for thread 1 is in sequence #461

    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    CANCEL
    Media recovery cancelled.
    SYS@dev01dg> 

      当手动apply完所有日志后,就可以failover切换到primary了。但是要注意的时,由于备库没有收到主库End-Of-REDO的信号,所以直接转换会报错,要求介质恢复。此时需要提交命令告诉备库,日志恢复已经finish了,需要进行failover切换。注意switchover时千万不要带有finish选项,否则就会变成failover了

    SYS@dev01dg> alter database commit to switchover to primary with session shutdown;
    alter database commit to switchover to primary with session shutdown
    *
    ERROR at line 1:
    ORA-16139: media recovery required

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PHYSICAL STANDBY NOT ALLOWED

    SYS@dev01dg> alter database recover managed standby database finish [force];

    Database altered.

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PHYSICAL STANDBY TO PRIMARY

    SYS@dev01dg> alter database commit to switchover to primary with session shutdown;

    Database altered.

    SYS@dev01dg> alter database open;

    Database altered.

    SYS@dev01dg> select database_role,switchover_status from v$database;

    DATABASE_ROLE    SWITCHOVER_STATUS
    ---------------- --------------------
    PRIMARY          SESSIONS ACTIVE

    SYS@dev01dg>

      failover完成后,数据库其实是以resetlogs方式打开的,如果log_archive_format='arch_%d_%t_%r_%s.dbf',可以看到归档日志的文件名会有新的resetlogs ID和sequence number,以此与原有的归档日志进行区分。

  • 相关阅读:
    极客互动极客技术专题【003期】:java mvc 增删改查 自动生成工具来袭
    协议命令网络工程试验一
    主题网站分享两套免费的超棒响应式HTML5网站模板
    算法结点图的多源点最短路问题和传递闭包之FloydWarshall算法 By ACReaper
    属性页面Flexbox布局的简单演示之二
    数据库性能Quest Performance Analysis Overview
    网站查看帮助查看本地表单元素样子的网站 Native Form Elements
    文件格式配置文件weka频繁模式挖掘使用方法
    风格希望分享8个超棒的免费界面UI设计
    方法事务applicationContext.xml
  • 原文地址:https://www.cnblogs.com/newmanzhang/p/3450363.html
Copyright © 2020-2023  润新知