ADG网络故障恢复演练
演练背景
客户计划五一之后对核心生产环境的ADG数据库进行恢复演练,就是切断主备之间的网络,将备库升级为主库,待网络恢复后,在恢复原状。一开始计划流程如下:
- 模拟网络切断
- 备库switchover为主库
- 网络恢复,主库降级为备库
- 然后手动switchover ,恢复原状。
但是在测试环境测试的,切断网络后,备库无法switchover为主库,只能failover,而且一旦failover后,主库想降级为备库,也报错“ORA-16416: No viable Physical Standby switchover targets available”这时只有两个办法
- 重新同步数据到原主库
- 闪回
所以正确的流程如下:
- 模拟网络切断
- 备库failover为主库
- 网络恢复,主库闪回到断网前的状态
- 主库降级为备库
- 然后手动switchover ,恢复原状。
下面是利用闪回数据库,来进行ADG网络故障恢复演练
实验步骤
确保主库开启闪回
SQL> select name,open_mode,DATABASE_ROLE ,switchover_status,FLASHBACK_ON from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FLASHBACK_ON
--------- -------------------- ---------------- -------------------- ------------------
PROD READ WRITE PRIMARY TO STANDBY YES
如果没有开启,按照下面步骤开启
备库停止日志应用,主库启动到mount 状态
alter system set DB_RECOVERY_FILE_DEST_SIZE=10G;
ALTER SYSTEM SET db_recovery_file_dest = '/oceanbase/oracle/fra/';
alter database flashback on;
alter database open;
为安全起见,redo日志做下归档
alter system switch logfile;
alter system archive log current;
切断网络
我用的VirtualBOX,直接关闭右下角的网卡
备库强制归档日志应用
alter database recover managed standby database cancel; --关闭日志应用
alter database recover managed standby database finish force; --强制应用归档日志
备库failover为主库
alter database commit to switchover to primary with session shutdown wait;
alter database open;
查看备库升级为主库的scn号
SQL> SELECT STANDBY_BECAME_PRIMARY_SCN FROM V$DATABASE;STANDBY_BECAME_PRIMARY_SCN
--------------------------1775200 --这个就是原主库需要闪回到的时间点
网络恢复,主库重新启动到mount
startup mount;
flashback database to scn 1775200;
主库降级为主库
alter database convert to physical standby;
alter database open;
开启应用日志
alter database recover managed standby database using current logfile disconnect from session;
查看日志应用状态
SQL> select process,pid,status,thread#,sequence#,delay_mins from v$managed_standby;PROCESS PID STATUS THREAD# SEQUENCE# DELAY_MINS
--------- ------------------------ ------------ ---------- ---------- ----------
ARCH 16574 CONNECTED 0 0 0
ARCH 16576 CONNECTED 0 0 0
ARCH 16578 CLOSING 1 2 0
ARCH 16580 CONNECTED 0 0 0
DGRD 16582 ALLOCATED 0 0 0
DGRD 16584 ALLOCATED 0 0 0
RFS 16645 IDLE 0 0 0
RFS 16654 IDLE 1 3 0
RFS 16649 IDLE 0 0 0
RFS 16651 IDLE 0 0 0
MRP0 16722 APPLYING_LOG 1 3 0
此时原备库升级为主库,原主库降级为备库。接下来就是恢复原状了
当前redo归档
alter system archive log current;
新主库switchover为备库
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup mount;
新备库升级为主库
alter database commit to switchover to primary with session shutdown wait;
alter database open;
备库开启,并开启日志应用
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
验证日志应用状态
SQL> select process, pid, status, thread#,sequence#,blocks from v$managed_standby;PROCESS PID STATUS THREAD# SEQUENCE# BLOCKS
--------- ------------------------ ------------ ---------- ---------- ----------
ARCH 17017 CLOSING 1 6 1
DGRD 17019 ALLOCATED 0 0 0
DGRD 17021 ALLOCATED 0 0 0
ARCH 17023 CONNECTED 0 0 0
ARCH 17027 CONNECTED 0 0 0
ARCH 17025 CLOSING 1 7 371
RFS 17061 IDLE 0 0 0
RFS 17063 IDLE 1 8 1
RFS 17065 IDLE 0 0 0
MRP0 17158 APPLYING_LOG 1 8 409600
DGRD 17175 ALLOCATED 0 0 0