Oracle Active Data Guard 详解

Oracle Active Data Guard 详解

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


1. 概述

Active Data Guard 允许备库在 Redo Apply 时只读[1]:

详细见:Oracle Data Guard 架构详解


2. 特性

2.1 只读 + 应用

- 备库只读
- Redo Apply 同时
- 实时

2.2 实时查询

- Real-Time Query
- 实时数据
- 报表

2.3 自动块修复

- 主库坏块
- 备库自动修复
- 透明

3. 启用

3.1 物理备库

-- 备库
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

3.2 Broker

DGMGRL> EDIT DATABASE stby SET PROPERTY LogXptMode='ASYNC';
DGMGRL> EDIT DATABASE stby SET STATE='APPLY-ON';

3.3 License

- Active Data Guard Option
- 需 license
- 检查

4. 应用场景

4.1 读写分离

- 主库:写
- 备库:读
- 性能

4.2 报表

- 复杂报表
- 备库执行
- 主库无影响

4.3 查询

- 历史查询
- 实时数据
- 一致

5. 自动块修复

5.1 原理

- 主库坏块(ORA-01578)
- 自动从备库获取
- 修复

5.2 透明

- 自动
- 应用无感知
- 不中断

5.3 配置

ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(prod,stby)';
-- 自动启用

6. DML 重定向

6.1 19c+

- 备库 DML
- 转发主库执行
- 透明

6.2 启用

ALTER SESSION ENABLE ADG_REDIRECT_DML;
-- 或参数
ALTER SYSTEM SET adg_redirect_dml=true;

6.3 限制

- 不支持 DDL
- 触发器限制
- 检查

7. PL/SQL 调用

7.1 19c+

- 备库 PL/SQL
- 转发主库
- 透明

7.2 启用

ALTER SYSTEM SET adg_redirect_plsql=true;

8. 性能

8.1 Redo Apply

- 异步
- 不影响主库
- 监控

8.2 查询

- 备库资源
- 并行
- 性能

8.3 监控

SELECT apply_rate FROM v$standby_event_histogram;

9. 跟踪

9.1 事件

SELECT event, time_waited 
FROM v$system_event 
WHERE event LIKE 'physical%';

9.2 进程

SELECT process, status, sequence#, block#, delay_mins
FROM v$managed_standby;

10. 测试

10.1 验证

-- 备库
SELECT open_mode, database_role, protection_mode FROM v$database;
-- READ ONLY WITH APPLY

10.2 实时

-- 主库变更
UPDATE emp SET salary = 5000 WHERE id = 1;
COMMIT;

-- 备库立即查
SELECT salary FROM emp WHERE id = 1;
-- 5000

11. 常见问题

11.1 ORA-16665

- 状态异常
- 检查
- 重启应用

11.2 延迟

- 网络
- Apply
- 优化

11.3 块修复

- 自动
- 检查日志
- 验证

12. 最佳实践

  1. 读写分离:报表
  2. 自动块修复:启用
  3. DML 重定向:19c+
  4. 监控:延迟
  5. 资源:备库足够
  6. 并行:Apply
  7. License:确认
  8. 测试:实时
  9. 文档:配置
  10. 演练:故障

13. 参考资料

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