Oracle Data Guard 保护模式详解

Oracle Data Guard 保护模式详解

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


1. 概述

Data Guard 保护模式定义数据保护级别[1]:

详细见:Oracle Data Guard 架构详解


2. 三种保护模式

2.1 Maximum Protection(最高保护)

- SYNC + AFFIRM
- 零数据丢失
- 备库故障主库停
- 牺牲可用性

2.2 Maximum Availability(最高可用)

- SYNC + AFFIRM
- 零数据丢失(备库可用时)
- 备库故障主库继续(降级)
- 平衡

2.3 Maximum Performance(最高性能)

- ASYNC + NOAFFIRM
- 默认
- 可能数据丢失
- 最高性能

3. 对比

模式传输数据丢失主库可用性能
Maximum ProtectionSYNC备库故障停
Maximum AvailabilitySYNC零(备库正常)
Maximum PerformanceASYNC可能最高

4. 配置

4.1 Maximum Performance

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

LOG_ARCHIVE_DEST_2 = 'SERVICE=stby1 ASYNC NOAFFIRM ...'

4.2 Maximum Availability

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

LOG_ARCHIVE_DEST_2 = 'SERVICE=stby1 SYNC AFFIRM ...'

4.3 Maximum Protection

-- 必须 MOUNT
STARTUP MOUNT;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
ALTER DATABASE OPEN;

LOG_ARCHIVE_DEST_2 = 'SERVICE=stby1 SYNC AFFIRM ...'

5. 查看

SELECT protection_mode, protection_level 
FROM v$database;

-- protection_mode:配置的模式
-- protection_level:当前实际

6. 切换模式

6.1 升级

-- Performance → Availability
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

-- Availability → Protection
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
ALTER DATABASE OPEN;

6.2 降级

-- Protection → Availability
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

-- Availability → Performance
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

7. AFFIRM / NOAFFIRM

7.1 AFFIRM

- 备库写 Standby Redo Log 确认
- 主库等待
- 数据安全
- 性能影响

7.2 NOAFFIRM

- 备库接收即确认
- 不等待写盘
- 性能好
- 风险

7.3 配置

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 
  'SERVICE=stby1 SYNC AFFIRM ...';  -- 或 NOAFFIRM

8. SYNC / ASYNC

8.1 SYNC

- 同步传输
- 主库等待备库确认
- 零数据丢失
- 网络延迟影响

8.2 ASYNC

- 异步传输
- 不等待
- 可能丢失
- 高性能

详细见:Oracle Data Guard Redo 传输详解


9. NET_TIMEOUT

9.1 配置

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 
  'SERVICE=stby1 SYNC AFFIRM NET_TIMEOUT=10 ...';

9.2 超时

- 网络超时
- Maximum Availability:降级继续
- Maximum Protection:停主库

10. 应用场景

10.1 金融

- Maximum Protection
- 零数据丢失
- 牺牲可用性

10.2 关键业务

- Maximum Availability
- 零数据丢失(正常时)
- 高可用

10.3 一般业务

- Maximum Performance
- 容忍少量丢失
- 高性能

11. 最佳实践

11.1 选择

- 金融:Protection
- 关键:Availability
- 一般:Performance

11.2 网络

- SYNC:低延迟
- ASYNC:容忍延迟
- Far Sync:远距离

11.3 测试

- Failover
- 数据丢失评估
- 性能测试

12. 常见坑与排错

12.1 Maximum Protection 主库停

- 备库故障
- 主库无法继续
- 降级为 Availability

12.2 降级运行

- 检查 protection_level
- RESYNCHRONIZE
- 恢复

12.3 性能问题

- SYNC 网络延迟
- AFFIRM 磁盘
- 监控

13. 监控

SELECT protection_mode, protection_level, open_mode 
FROM v$database;

SELECT dest_id, status, error 
FROM v$archive_dest_status 
WHERE dest_id = 2;

SELECT name, value FROM v$dataguard_stats;

14. 最佳实践

  1. 业务需求:选择
  2. 网络:低延迟
  3. Standby Redo Log:必须
  4. AFFIRM:数据安全
  5. NET_TIMEOUT:合理
  6. 监控:protection_level
  7. 测试:Failover
  8. 降级:预案
  9. 文档:RPO
  10. 演练:定期

15. 参考资料

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