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;

详细见:Oracle Flashback 技术全集


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. 最佳实践

  1. 测试:演练
  2. Broker:简化
  3. Flashback:Reinstate
  4. Fast-Start:HA
  5. Observer:独立
  6. Gap 解决:及时
  7. 验证:状态
  8. 监控:告警
  9. 文档:流程
  10. 备份:配置

12. 参考资料

[1] Oracle Data Guard Concepts and Administration 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/