已索引
切换前检查:
Step 1:检查主库是否准备好切换为备库
SQL> SELECT SWITCHOVER_STATUS FROM GV$DATABASE;
SWITCHOVER_STATUS
--------------------
TO STANDBY
SESSION ACTIVE
A value of TO STANDBY or SESSIONS ACTIVE indicates that the primary database can be switched to the standby role.
检查从库的切换状态(官方文档没有,但是建议增加):
SQL> select SWITCHOVER_STATUS FROM GV$DATABASE;
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
NOT ALLOWED
SQL> SELECT OPEN_MODE FROM GV$DATABASE;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
Step 2:将主库切换为备库
官方文档上并没有关闭节点2的动作,基于SCRCU实践,可以增加该步骤:
在主库节点2上执行如下命令关闭节点2,只保留节点1:
shutdown immediate;
在主库节点1上执行如下命令将主库切换为备库:
SQL> alter system switch logfile; <--- 官方文档上没有,基于SCRCU实践
SQL> alter system checkpoint; <--- 官方文档上没有,基于SCRCU实践
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> select 1 from dual; <--- 官方文档上没有,基于SCRCU实践,检查主库状态,正常返回Oracle不可访问,表示实例已经关闭
该命令会将原主库切换为备库并将两个实例关闭。
如果上面的查询结果是 "TO STANDBY","WITH SESSION SHUTDOWN" 可以忽略。
切换之前会自动将控制文件备份一份到当前会话的 trace 文件。如果需要,可以通过它来重建控制文件。
Step 3:检查原备库是否准备好切换为主库
SQL> SELECT INST_ID, SWITCHOVER_STATUS FROM GV$DATABASE;
INST_ID SWITCHOVER_STATUS
---------- --------------------
1 TO PRIMARY
2 SESSIONS ACTIVE
A value of TO PRIMARY or SESSIONS ACTIVE indicates that the standby database is ready to be switched to the primary role.
Step 4:将原备库切换为主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
SQL> ALTER DATABASE OPEN; <--- 在所有节点上执行
如果上面的查询结果是 "TO PRIMARY","WITH SESSION SHUTDOWN" 可以忽略。
Step 5:启用新备库
$ srvctl start database -d demodb
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Step 6:切换后检查
检查主、备库状态及日志同步情况。