Oracle Data Guard 保护模式详解
Oracle Data Guard 保护模式详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Data Guard 保护模式定义数据保护级别[1]:
2. 三种保护模式
2.1 Maximum Protection(最高保护)
- SYNC + AFFIRM
- 零数据丢失
- 备库故障主库停
- 牺牲可用性
2.2 Maximum Availability(最高可用)
- SYNC + AFFIRM
- 零数据丢失(备库可用时)
- 备库故障主库继续(降级)
- 平衡
2.3 Maximum Performance(最高性能)
- ASYNC + NOAFFIRM
- 默认
- 可能数据丢失
- 最高性能
3. 对比
| 模式 | 传输 | 数据丢失 | 主库可用 | 性能 |
|---|---|---|---|---|
| Maximum Protection | SYNC | 零 | 备库故障停 | 低 |
| Maximum Availability | SYNC | 零(备库正常) | 高 | 中 |
| Maximum Performance | ASYNC | 可能 | 最高 | 高 |
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. 最佳实践
- 业务需求:选择
- 网络:低延迟
- Standby Redo Log:必须
- AFFIRM:数据安全
- NET_TIMEOUT:合理
- 监控:protection_level
- 测试:Failover
- 降级:预案
- 文档:RPO
- 演练:定期
15. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c, “Protection Modes” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/