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'
;
原文地址:https://www.cnblogs.com/binliubiao/p/15148553.html