Oracle Data Guard 架构详解

Oracle Data Guard 架构详解

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


1. 概述

Data Guard 是 Oracle 灾难恢复核心方案[1]:

详细见:Oracle Data Guard 架构详解


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

  1. Broker:使用
  2. Active Data Guard:读写分离
  3. Far Sync:零丢失
  4. 监控:实时
  5. 演练:定期
  6. 保护模式:场景
  7. 网络:冗余
  8. 密码:一致
  9. 文档:配置
  10. 自动化:Failover

16. 参考资料

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