已索引

切换前检查:

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:切换后检查

检查主、备库状态及日志同步情况。

-- By 许望(RHCA、OCM、VCP)
最后修改:2025 年 04 月 16 日 03 : 21 PM
如果觉得我的文章对你有用,请随意赞赏