Oracle DG Switchover

切换前准备
1,检查DG参数配置
2,检查日志应用
3,如果是集群环境,请保留一个实例,关闭其他实例(主备库)

 srvctl stop instance -d db_name -i instance_name

切换步骤
1,确认主库状态是否可以切换为备库

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS 
 ----------------- 
 TO STANDBY 
 1 row selected 

2,主库启动切换

若数据库状态为TO STANDBY进行下一步

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

若数据库状态为session active的时候表示还有活动的session,则运行

 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; 

若数据库状态为not allowed(包括其他状态)时,官方文档说转换会不成功

3,关闭并启动原主库到mount

SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT;

4,验证原备库状态是否可切换为primary

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS 
----------------- 
TO_PRIMARY 
1 row selected

如果数据库状态为TO PRIMARY or SESSIONS ACTIVE,说明可以切换,否则需要检查日志应用是否正常,查看日志传输是否工作,直到状态成为TO PRIMARY or SESSIONS ACTIVE方可切换。
5,切换原备库为主库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

如果数据库状态为TO PRIMARY,则可省略 WITH SESSION SHUTDOWN。
6,启动新主库

SQL> ALTER DATABASE OPEN;

7,启动新DG的日志应用

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE -
> DISCONNECT FROM SESSION;

switchover三部曲
1,切换前数据库环境,旧金山的主库及波士顿的备库
Oracle DG Switchover

2,切换中,两个备库
Oracle DG Switchover
3,切换完成,主备角色转换
Oracle DG Switchover

部分报错处理
1,ORA-01105: mount is incompatible with mounts by other instances
集群环境切换前,请关闭实例仅保留一个实例运行