Oracle Switchover 详解

Oracle Switchover 详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Switchover 是计划内主备角色转换[1]:

详细见:Oracle Data Guard Broker 详解Oracle Failover 详解


2. 特点

2.1 计划内

- 维护
- 升级
- 测试
- 零数据丢失

2.2 角色

- 主库 -> 备库
- 备库 -> 主库
- 互换

2.3 可逆

- 可切换回
- 可重复
- 灵活

3. 前提

3.1 状态

- 主备正常
- Redo 同步
- 无 GAP

3.2 备库

- Active Data Guard
- 或 MOUNT
- APPLY ON

3.3 网络

- 主备互通
- 监听正常
- 服务名

4. 验证

4.1 主库

SELECT switchover_status FROM v$database;
-- TO STANDBY:可切换
-- SESSIONS ACTIVE:有会话

4.2 备库

SELECT switchover_status FROM v$database;
-- TO PRIMARY
-- SESSIONS ACTIVE

4.3 GAP

-- 主库
SELECT max(sequence#) FROM v$archived_log WHERE dest_id=2;
-- 备库
SELECT max(sequence#) FROM v$archived_log WHERE applied='YES';
-- 一致

5. SQL 命令

5.1 主库转备

-- 主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY 
  WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

5.2 备库转主

-- 备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY 
  WITH SESSION SHUTDOWN;
ALTER DATABASE OPEN;

5.3 旧主库应用

-- 旧主库(现备库)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

6. Broker

6.1 一键

DGMGRL> SWITCHOVER TO stby;

6.2 流程

1. 验证
2. 主库转备
3. 备库转主
4. 应用切换
5. 旧主库应用

6.3 验证

DGMGRL> SHOW CONFIGURATION;

7. 应用切换

7.1 服务

- 主角色服务
- 备角色服务
- 自动切换

7.2 连接

- TNS 重连
- 应用重连
- TAF

7.3 VIP/SCAN

- RAC 环境
- 服务迁移
- 透明

8. 11g+ 增强

8.1 透明

- 11g+
- 应用无感知
- 快速

8.2 在线

- 不停止
- 业务连续
- 零停机

8.3 自动

- Broker
- 一键
- 自动

9. 监控

9.1 状态

SELECT database_role, open_mode, switchover_status
FROM v$database;

9.2 日志

- alert log
- drc<sid>.log
- Broker log

9.3 应用

- 连接
- 服务
- 验证

10. 演练

10.1 测试

- 定期
- 季度
- 验证

10.2 流程

1. 通知
2. 应用准备
3. Switchover
4. 验证
5. 应用切换
6. 监控

10.3 回退

- 切换回
- 验证
- 文档

11. 常见问题

11.1 ORA-16139

- 未恢复完成
- 等待
- 重试

11.2 SESSIONS ACTIVE

- 活跃会话
- WITH SESSION SHUTDOWN
- 强制

11.3 GAP

- 未同步
- 修复 GAP
- 重试

12. 最佳实践

  1. Broker:使用
  2. 验证:切换前
  3. GAP:确保无
  4. 应用:TAF/AC
  5. 服务:角色切换
  6. 监控:状态
  7. 演练:定期
  8. 低峰:执行
  9. 文档:流程
  10. 回退:预案

13. 参考资料

[1] Oracle Data Guard 19c, “Role Transitions” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/