Oracle Data Guard 架构详解
Oracle Data Guard 架构详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Data Guard 是 Oracle 灾难恢复核心方案[1]:
2. 架构
2.1 主库(Primary)
- 生产数据库
- 读写
- Redo 传输
2.2 备库(Standby)
- 物理备库:块级复制
- 逻辑备库:SQL 应用
- Snapshot:可读写快照
2.3 服务
- Log Network Services(LNS)
- Remote File Service(RFS)
- Data Guard Broker
- Observer
3. 备库类型
3.1 物理备库
- 块级复制
- Redo Apply
- 完全一致
3.2 逻辑备库
- SQL Apply
- LogMiner
- 可读写
3.3 Snapshot Standby
- 可读写快照
- Flashback 恢复
- 测试用
3.4 Far Sync
- 11g+
- 远程重做转发
- 零丢失
4. Redo 传输
4.1 LGWR
- 同步传输(SYNC)
- 等待备库确认
- 零丢失
4.2 ARCH
- 异步传输(ASYNC)
- 归档后传输
- 性能优先
4.3 LNS
- Log Network Server
- 网络传输
- 处理
5. 应用方式
5.1 Redo Apply(物理)
- MRD0 进程
- 块级应用
- 一致
5.2 SQL Apply(逻辑)
- LSP 进程
- SQL 重建
- 灵活
5.3 延迟应用
- DELAY
- 时间延迟
- 误操作防护
6. 保护模式
6.1 最大性能
- ASYNC
- 性能优先
- RPO > 0
6.2 最大可用
- SYNC
- 备库不可用降级
- RPO = 0(正常)
6.3 最大保护
- SYNC
- 备库不可用主库停
- RPO = 0
详细见:Oracle 保护模式详解。
7. Data Guard Broker
7.1 配置
dgmgrl sys/password@prod
DGMGRL> CREATE CONFIGURATION dg_cfg AS PRIMARY DATABASE IS prod CONNECT IDENTIFIER IS prod;
DGMGRL> ADD DATABASE stby AS CONNECT IDENTIFIER IS stby MAINTAINED AS PHYSICAL;
DGMGRL> ENABLE CONFIGURATION;
7.2 命令
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW DATABASE prod;
DGMGRL> EDIT DATABASE stby SET PROPERTY LogXptMode='SYNC';
DGMGRL> SWITCHOVER TO stby;
DGMGRL> FAILOVER TO stby;
详细见:Oracle Data Guard Broker 详解。
8. Active Data Guard
8.1 特性
- 备库只读
- Redo Apply 同时
- 报表/查询
8.2 优势
- 读写分离
- 性能
- 资源利用
8.3 DML 重定向
- 19c+
- 备库 DML 转发主库
- 灵活
详细见:Oracle Active Data Guard 详解。
9. 角色
9.1 Primary
- 主角色
- 读写
- Redo 源
9.2 Standby
- 备角色
- 只读/恢复
- Redo 目标
9.3 切换
- Switchover:计划
- Failover:紧急
- 角色转换
10. 配置
10.1 参数
ALTER SYSTEM SET log_archive_config='dg_config=(prod,stby)';
ALTER SYSTEM SET log_archive_dest_2='service=stby async valid_for=(online_logfiles,primary_role) db_unique_name=stby';
ALTER SYSTEM SET fal_server='stby';
ALTER SYSTEM SET standby_file_management='AUTO';
10.2 网络
# tnsnames.ora
prod = (DESCRIPTION = ...)
stby = (DESCRIPTION = ...)
10.3 密码
- 密码文件一致
- SYS 密码相同
- orapwd
11. 创建备库
11.1 RMAN DUPLICATE
rman target sys/pwd@prod auxiliary sys/pwd@stby
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
11.2 Active Database
- 在线复制
- 无需备份
- 网络
11.3 RMAN 备份
- 传统备份恢复
- 离线
- 适合大库
12. 监控
12.1 状态
SELECT database_role, protection_mode, protection_level, switchover_status
FROM v$database;
12.2 延迟
SELECT * FROM v$dataguard_stats;
SELECT max(sequence#) FROM v$archived_log;
12.3 进程
SELECT process, status, client_process, sequence#, block#, delay_mins
FROM v$managed_standby;
13. 应用场景
13.1 灾备
- 数据冗余
- 灾难恢复
- RPO=0
13.2 读写分离
- Active Data Guard
- 报表
- 性能
13.3 升级
- 滚动升级
- 零停机
- Data Guard
14. 常见问题
14.1 GAP
- 归档缺失
- FAL 自动
- 修复
14.2 延迟高
- 网络
- 性能
- 优化
14.3 切换失败
- 状态
- 日志
- 重试
15. 最佳实践
- Broker:使用
- Active Data Guard:读写分离
- Far Sync:零丢失
- 监控:实时
- 演练:定期
- 保护模式:场景
- 网络:冗余
- 密码:一致
- 文档:配置
- 自动化:Failover
16. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/