在DG中,switchover和failover是两个重要的概念,也是DG实现的核心。根据不同的DG配置,switchover和failover也是有差异的。当主库被crash之后,如何进行DG foilover的操作?
概述
本文是针对在DG灾备环境进行failover操作以及后续恢复的报告。
验证过程
1、A库异常关闭
A库:
SQL>shutdown abort
2、B库进行failover切换为新主库
failover 标准步骤如下:
#取消DG应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
#重启下数据库(建议)
shutdown immediate;
startup
#操作不可逆,确定实际情况需要failover
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH force;
SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;
#尝试常规切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果这一步的常规切换失败,提示需要介质恢复,那么:
1)恢复备库 recover standby database until cancel;
2)激活备库 alterdatabaseactivatestandbydatabase;
#最后重新启动数据库
shutdownimmediate;
startup
查看此时B库的信息:
SQL>selectname, database_role, open_mode fromgv$database;
可以看到,目前B库已成为新的主库,redo日志的sequence重新开始。
3、要求C库成为新主库的备库
现在要求C库成为新主库的备库。是否需要重建C库呢?答案是不需要。下面具体来看下验证过程。
C库的alert日志:
可以看到,在A库crash之后,C库收到网络无法连接到A库的告警,说明C库目前没有新的操作。
接下来想要C库成为B库(新主库)的备库,就需要尝试在B库上配置DG参数,使得B库的归档可以传输到C库。
同时在B库的tnsnames.ora文件中增加到C库的连接:
#StandbySingle Instance
JYZHAO_S=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jyzhao_s)) )
在B库设置完成后,观察B库的告警:
然后返回C库操作,将C库开启实时日志应用:
SQL>alter database recover managed standby database cancel;
Databasealtered.
SQL>alter database recover managed standby database using current logfile disconnect from session;
Databasealtered.
此时再观察C库的告警日志:
上面这个数据文件头的检查点是0,说明数据文件没有正确获取到,实际上是由于OMF的名字有变化,直接将数据文件路径catalog到备份集中,再switch即可。
catalogstartwith'+DATA1/jyzhao/datafile/';
switchdatabase to copy;
再次查询:
此时在mount状态下开启日志应用:
alter database recover managed standby database disconnect from session;
从告警日志观察,确认应用到最新时,取消日志应用:
alter database recover managed standby database cancel;
打开数据库,开启实时应用:
alter database recover managed standby database USING CURRENT LOGFILE disconnect from session;
最终查询可以正常实时应用。
结论
一般来说,在A库crash之后,B库failover成为新的主库,那么原来设置为延迟1小时应用的C 库是可以直接配置成为新主库的备库。A库修复后,也可以通过failover之前的现有备份集来恢复到failover之前的状态,而不需要在新主库重新去备份。
原文发布时间为:2017-11-1
本文作者:赵靖宇
本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号