• Oracle-DG环境进行failover故障演练


    简介

    failover故障切换是指主库非计划内不可用时进行的切换操作。failover之后,DG环境会被破环,一般需要重建才能恢复DG。如果开启闪回功能,可以通过闪回数据库功能快速恢复DG环境。

    恢复DG环境的方法

    例如当前的DG环境:orcl为主库,orclstd为备库,当orcl宕机后,orclstd执行failover操作变为主库,此时想恢复DG环境。

    1. 将 orcl 利用闪回数据库功能闪回到 orclstd 执行failover的SCN时间点,然后将orcl转为备库,最后利用switchover转换为最初的状态。orcl需要开启闪回

      -- 闪回数据库后,切换为备库SQL语句
      alter database convert to physical standby;
      
    2. 将 orclstd 利用闪回数据库功能闪回到 orclstd 执行failover的SCN时间点,此时orclstd仍然会主库角色运行,然后将orclstd转换备库。orclstd需要开启闪回,而且会丢失部分数据

    3. 利用rman重新搭建DG环境

    实验过程

    主备库开启闪回

    检查配置参数

    -- 检查配置
    set lines 300 pages 999
    col name for a16
    col db_unique_name for a18
    col host_name for a28
    select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
    
    select oldest_flashback_scn, to_char(oldest_flashback_time,'yyyy-mm-dd HH24:mi:ss') oldest_flashback_time from v$flashback_database_log;
    
    show parameter db_flashback_retention_target
    

    数据库必须开启归档模式

    必须配置闪回恢复区

    show parameter db_recovery_file
    
    参数配置
    -- 指定闪回恢复区,也就是存放闪回日志的位置
    alter system set db_recovery_file_dest ='+FRA' scope=spfile sid='*';
    -- 指定恢复区大小
    alter system set db_recovery_file_dest_size=10G scope=spfile sid='*'; 
    --设置闪回保留的目标时间(只是target,2880分钟=两天)
    alter system set db_flashback_retention_target=2880 scope=spfile sid='*';
    
    alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';
    

    主库开启闪回

    -- 开启闪回
    startup mount;
    alter database flashback on;
    alter database open;
    

    参数db_flashback_retention_target控制闪回时间范围,数字单位是分钟,默认值为1天

    备库开启闪回

    alter database recover managed standby database cancel;
    alter database flashback on;
    
    alter database recover managed standby database using current logfile disconnect from session;
    

    利用flashback恢复ADG架构

    主库(主库故障模拟)

    -- 模拟主库发生故障
    shutdwon abort;
    

    备库(故障转移接管业务请求)

    检查现备库是否有GAP
    select thread#, low_sequence#, high_sequence# from v$archive_gap;
    
    关闭日志应用
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    -- alter database recover managed standby database finish;
    
    切换为主库
    激活方式将备库转换为主库
    ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
    

    image-20210816160735373

    image-20210816160822339

    switchover方式转换为主库
    alter database commit to switchover to primary with session shutdown;   -- <<<< 等数据库采用shutdown abort方式关闭或人为进行shutdown abort方式关闭数据库
    
    检查数据库信息
    -- 检查新主库角色 new primary(old standby)
    select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
    
    打开数据库
    alter database open;
    
    获取SCN号
    SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) std_scn FROM V$DATABASE; 
    

    主库(主库故障恢复)

    使用flashback方式将原主库恢复成物理备库
    flashback闪回数据库
    startup mount;
    
    -- 上面获取到的SCN 号:SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) std_scn FROM V$DATABASE;
    flashback database to scn 1388401; 
    
    select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
    
    恢复为physical standby
    alter database convert to physical standby; 
    shutdown immediate; 
    startup mount; 
    -- 开启日志apply
    alter database recover managed standby database using current logfile disconnect from session;
    

    至此,ADG恢复完成。

    使用控制文件恢复ADG环境
    新主库上创建standby control file
    alter database create standby controlfile as '/tmp/new_standby.ctl';
    
    故障主库恢复
    # 传输standby control file到故障在主库
    scp /tmp/new_standby.ctl oracle@primary:/ups/data/ora11g/ORCL/controlfile/new_standby.ctl
    
    • 启动故障主库

      startup mount;
      -- 追新增数据
      alter database recover managed standby database using current logfile disconnect from session;
      

      image-20210816162751935

    • 打开数据库并应用日志

      alter database recover managed standby database cancel;
      alter database open;
      ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT  LOGFILE DISCONNECT FROM SESSION;
      
    • 检查状态

      select name,db_unique_name,open_mode,log_mode,database_role,(select HOST_NAME from v$instance) HOST_NAME,flashback_on from v$database;
      

    至此,恢复环境到DG配置。

    Failover操作后,在原主库闪回恢复DG环境

    主库(abort)

    select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
    
    -- 模拟故障关闭
    shutdown abort
    

    备库

    alter database recover managed standby database cancel;
    
    alter database recover managed standby database finish;
    
    alter database commit to switchover to primary with session shutdown;
    
    select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
    
    alter database open;
    

    恢复DG环境

    获取failover操作的时间点(新主库)
    -- 新主库上查询v$database
    SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)  FROM V$DATABASE;
    
    原主库执行闪回操作
    startup mount;
    -- 闪回数据库
    flashback database to scn 869568;  -- 上面 v$database.STANDBY_BECAME_PRIMARY_SCN 的值
    -- 查询数据库信息
    select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
    
    原主库转换为备库

    注意:原Primary是以primary角色运行启动的,需要先成为Standby角色并应用后续的日志达到同步。

    -- 转换为 physical standby role
    alter database convert to physical standby;
    
    -- 启动数据库
    startup force;
    
    -- 应用日志
    alter database recover managed standby database using current logfile disconnect from session;
    
    执行switchover切换成初始环境

    详见 switchover实施方案

    Failover操作后,在原备库闪回恢复DG环境

    主库(abort)

    select dbid,name,current_scn,protection_mode,protection_level,database_role,force_logging,open_mode,switchover_status from v$database;
    
    -- 模拟故障关闭
    shutdown abort
    

    备库

    alter database recover managed standby database finish force;
    
    alter database commit to switchover to primary with session shutdown;
    
    select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
    
    alter database open;
    

    恢复DG环境

    获取failover操作的时间点(新主库)
    shutdown immediate;
    startup mount;
    
    -- 新主库上查询v$database
    select STANDBY_BECAME_PRIMARY_SCN from v$database;
    
    新主库执行闪回操作
    flashback database to scn 901823; -- 上面获取到的SCN
    
    新主库转换物理备库
    alter database convert to physical standby;
    
    新主库重新启动并开启日志应用
    shutdown immediate;
    startup;
    alter database recover managed standby database using current logfile disconnect from session;
    
    打开原主库
    startup force;
    

    检查确认DG状态

    SELECT CLIENT_PROCESS, PROCESS, THREAD#, SEQUENCE#, STATUS 
    FROM V$MANAGED_STANDBY 
    -- WHERE CLIENT_PROCESS='LGWR' OR PROCESS='MRP0'
    ;
    
  • 相关阅读:
    python文件上传
    Django
    Python生产环境部署(fastcgi,uwsgi)
    tp3.2 自带的文件上传及生成缩略图功能
    图片上传--base64
    图片上传
    PHP处理大数据量老用户头像更新的操作--解决数据量大超时的问题
    mysql悲观锁处理赠品库存超卖的情况
    bzoj 3551: [ONTAK2010]Peaks加强版
    bzoj 4817: [Sdoi2017]树点涂色
  • 原文地址:https://www.cnblogs.com/binliubiao/p/15148553.html
Copyright © 2020-2023  润新知