Oracle Data Guard Switchover 与 Failover 详解
Oracle Data Guard Switchover 与 Failover 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Switchover 与 Failover 是 Data Guard 角色切换的两种方式[1]:
详细见:Oracle Data Guard 架构详解、Oracle Data Guard Broker 详解。
2. 切换类型
2.1 Switchover
- 计划内
- 主备角色互换
- 无数据丢失
- 原主库变备库
- 可回切
2.2 Failover
- 计划外
- 备库变主库
- 可能数据丢失
- 原主库需重建
- 不可逆
3. Switchover
3.1 前置检查
-- 主库
SELECT switchover_status FROM v$database;
-- 期望:TO STANDBY 或 SESSIONS ACTIVE
-- 备库
SELECT switchover_status FROM v$database;
-- 期望:TO PRIMARY 或 SESSIONS ACTIVE
3.2 SQL 方式
-- 主库:切换为备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
-- 关闭并启动
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
-- 备库:切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
-- 备库:打开
ALTER DATABASE OPEN;
3.3 Broker 方式
DGMGRL> SHOW CONFIGURATION;
DGMGRL> VALIDATE DATABASE stby1;
DGMGRL> SWITCHOVER TO stby1;
DGMGRL> SHOW CONFIGURATION;
3.4 验证
-- 新主库
SELECT open_mode, database_role FROM v$database;
-- READ WRITE, PRIMARY
-- 新备库
SELECT open_mode, database_role FROM v$database;
-- READ ONLY WITH APPLY, PHYSICAL STANDBY
-- 日志应用
SELECT process, status, sequence# FROM v$managed_standby;
4. Failover
4.1 前置检查
-- 备库
SELECT thread#, sequence#, applied FROM v$archived_log ORDER BY 1, 2 DESC;
-- Gap 检查
SELECT * FROM v$archive_gap;
4.2 解决 Gap
-- 在新主库(备库)
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/log_1_123.arc';
4.3 强制 Redo 应用
-- 停止应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 强制
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
4.4 切换
-- 转为主库
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
-- 打开
SHUTDOWN IMMEDIATE;
STARTUP;
4.5 Broker 方式
DGMGRL> FAILOVER TO stby1;
5. Flashback Reinstate
5.1 启用 Flashback
-- 主备库均启用
ALTER DATABASE FLASHBACK ON;
5.2 Failover 后
-- 原主库
STARTUP MOUNT;
ALTER DATABASE FLASHBACK TO SCN 1234567;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
5.3 Broker
DGMGRL> REINSTATE DATABASE prod;
6. Fast-Start Failover
6.1 启用
DGMGRL> EDIT CONFIGURATION SET PROPERTY 'FastStartFailoverThreshold' = 30;
DGMGRL> EDIT DATABASE prod SET PROPERTY 'FastStartFailoverTarget' = 'stby1';
DGMGRL> EDIT DATABASE stby1 SET PROPERTY 'FastStartFailoverTarget' = 'prod';
DGMGRL> ENABLE FAST_START FAILOVER;
6.2 Observer
dgmgrl -logfile /tmp/observer.log sys/password@prod
DGMGRL> START OBSERVER;
6.3 触发
- 主库故障
- 阈值(30 秒)
- Observer 触发
- 自动 Failover
7. 保护模式
7.1 Maximum Protection
- SYNC
- 零数据丢失
- 备库故障主库停
7.2 Maximum Availability
- SYNC
- 零数据丢失(备库可用时)
- 备库故障主库继续
7.3 Maximum Performance
- ASYNC(默认)
- 数据可能丢失
- 最高性能
-- 设置
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
8. 最佳实践
8.1 Switchover
- 计划维护窗口
- 验证状态
- 备份
- 测试
- 文档
8.2 Failover
- 仅紧急
- 解决 Gap
- 评估数据丢失
- 通知业务
- 记录
8.3 自动化
- Fast-Start Failover
- Observer
- 监控
- 告警
9. 应用场景
9.1 计划维护
- 系统升级
- 硬件更换
- Switchover
9.2 灾难恢复
- 主库故障
- Failover
- 业务连续性
9.3 演练
- DR 演练
- 测试流程
- 团队培训
10. 常见坑与排错
10.1 Switchover 失败
- 日志未应用
- Gap
- 状态检查
10.2 Failover 数据丢失
- ASYNC 模式
- Gap 未解决
- 评估
10.3 Reinstate 失败
- Flashback 未启用
- SCN 范围外
- 重建
11. 最佳实践
- 测试:演练
- Broker:简化
- Flashback:Reinstate
- Fast-Start:HA
- Observer:独立
- Gap 解决:及时
- 验证:状态
- 监控:告警
- 文档:流程
- 备份:配置
12. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/