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]:
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. 最佳实践
- 读写分离:报表
- 自动块修复:启用
- DML 重定向:19c+
- 监控:延迟
- 资源:备库足够
- 并行:Apply
- License:确认
- 测试:实时
- 文档:配置
- 演练:故障
13. 参考资料
[1] Oracle Active Data Guard 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/