switchover DMSVR01
[monitor] 2023-09-15 15:15:33: 开始切换实例DMSVR01
[monitor] 2023-09-15 15:15:33: 通知守护进程DMSVR02切换SWITCHOVER状态
[monitor] 2023-09-15 15:15:33: 守护进程(DMSVR02)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2023-09-15 15:15:34: 切换守护进程DMSVR02为SWITCHOVER状态成功
[monitor] 2023-09-15 15:15:34: 通知守护进程DMSVR01切换SWITCHOVER状态
[monitor] 2023-09-15 15:15:34: 守护进程(DMSVR01)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2023-09-15 15:15:35: 切换守护进程DMSVR01为SWITCHOVER状态成功
[monitor] 2023-09-15 15:15:35: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2023-09-15 15:15:36: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2023-09-15 15:15:36: 实例DMSVR01开始执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句
[monitor] 2023-09-15 15:15:36: 实例DMSVR01执行SP_SET_GLOBAL_DW_STATUS(0, 6)语句成功
[monitor] 2023-09-15 15:15:36: 实例DMSVR02开始执行ALTER DATABASE MOUNT语句
[monitor] 2023-09-15 15:15:36: 实例DMSVR02执行ALTER DATABASE MOUNT语句成功
[monitor] 2023-09-15 15:15:36: 实例DMSVR01开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2023-09-15 15:15:37: 实例DMSVR01执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2023-09-15 15:15:37: 实例DMSVR01开始执行ALTER DATABASE MOUNT语句
[monitor] 2023-09-15 15:15:37: 实例DMSVR01执行ALTER DATABASE MOUNT语句成功
[monitor] 2023-09-15 15:15:37: 实例DMSVR02开始执行ALTER DATABASE STANDBY语句
[monitor] 2023-09-15 15:15:38: 实例DMSVR02执行ALTER DATABASE STANDBY语句成功
[monitor] 2023-09-15 15:15:38: 实例DMSVR01开始执行ALTER DATABASE PRIMARY语句
[monitor] 2023-09-15 15:15:38: 实例DMSVR01执行ALTER DATABASE PRIMARY语句成功
[monitor] 2023-09-15 15:15:38: 通知实例DMSVR01修改所有归档状态无效
[monitor] 2023-09-15 15:15:38: 修改所有实例归档为无效状态成功
[monitor] 2023-09-15 15:15:38: 实例DMSVR02开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2023-09-15 15:15:38: 实例DMSVR02执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2023-09-15 15:15:38: 实例DMSVR01开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2023-09-15 15:15:40: 实例DMSVR01执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2023-09-15 15:15:40: 实例DMSVR02开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2023-09-15 15:15:40: 实例DMSVR02执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2023-09-15 15:15:40: 实例DMSVR01开始执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句
[monitor] 2023-09-15 15:15:40: 实例DMSVR01执行SP_SET_GLOBAL_DW_STATUS(6, 0)语句成功
[monitor] 2023-09-15 15:15:40: 通知守护进程DMSVR02切换OPEN状态
[monitor] 2023-09-15 15:15:40: 守护进程(DMSVR02)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2023-09-15 15:15:41: 切换守护进程DMSVR02为OPEN状态成功
[monitor] 2023-09-15 15:15:41: 通知守护进程DMSVR01切换OPEN状态
[monitor] 2023-09-15 15:15:41: 守护进程(DMSVR01)状态切换 [SWITCHOVER-->OPEN]
[monitor] 2023-09-15 15:15:41: 切换守护进程DMSVR01为OPEN状态成功
[monitor] 2023-09-15 15:15:41: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2023-09-15 15:15:41: 清理守护进程(DMSVR01)请求成功
[monitor] 2023-09-15 15:15:41: 清理守护进程(DMSVR02)请求成功
[monitor] 2023-09-15 15:15:41: 实例DMSVR01切换成功
主备SWITCHOVER状态的工作流程如以上所示。
SWITCHOVER主要功能是保证整个故障切换过程中整个集群的无数据丢失,以及从库与主库数据保持一致。
主备库切换当需要对主库进行维护或需要滚动升级时,可以执行Switchover命令,实现主备库切换。如果存在多个备库,则需要先执行Choose Switchover命令,选出守护进程组中可以切换的备库。通过Choose Switchover命令选择可切换的备库需要一定的条件,具体内容如下。
(1)主库守护进程是Open状态。
(2)备库守护进程是Open状态。
(3)主库与备库的OPEN记录项内容相同,并且守护进程控制文件是Valid状态(内存值)。
(4)主库正常运行。
(5)备库正常运行。
(6)主库处于Open状态
(7)备库处于Open状态。
(8)主库到备库的归档是Valid状态。
监视器首先通知待切换主备库的守护进程修改为 Switchover 状态,设置成功以后,其他监视器将不能再进行命令操作。守护进程收到监视器将实例 Mount 的命令,转发到本地实例执行,实例执行完成后返回执行结果。执行结果包含在实例向守护进程发送的消息中,守护进程根据消息中的执行码判断是否执行成功,并响应监视器
(1)将主备库的守护进程切换到SWITCHOVER状态,个人理解SWITCHOVER状态相当于一个快照状态,即主备切换前后是在一个独立的状态下进行,如果SWITCHOVER失败,可以回退到SWITCHOVER状态的时刻。
(2)将原主库DMSVR02切换到mount状态,使得不再产生新的relog日志。
(3)新主库开始执行SP_APPLY_KEEP_PKG()语句重演原主库的redolog的确保主备数据保持一致。
(4)主备模式之间的交换,原主库DMSVR02切换STANDBY模式,原主库DMSVR01切换PRAMARY模式。
(5)修改所有实例的归档状态为无效状态
(6)强制FORCE打开主库和备库。
(7)如果主库和备库打开成功,意味着切换成功,就无需回退,所以从守护进程的SWITCHOVER状态切换到OPEN状态
(8)守护进程中或者内存中还有原来主备的陈旧的信息,需要清理重新生成
(9)响应监视器返回执行成功
Swithover命令完成后,主备库之间的数据是不完全同步的,要由新的主库的守护进程通过Recovery流程,重新同步数据到新的备库。Switchover命令会修改切换后主库守护进程INST_RECOVER_TIME的内存值为3s(默认为60s),确保尽快启动故障恢复流程,同步主库数据完成后,重新将归档设置为Valid状态。
文章
阅读量
获赞