Oracle Active Data Guard DML 重定向详解

Oracle Active Data Guard DML 重定向详解

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


1. 概述

DML 重定向允许备库执行 DML[1]:

详细见:Oracle Active Data Guard 详解


2. 特性

2.1 备库 DML

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

2.2 19c+

- 19c 新特性
- Active Data Guard
- 灵活

2.3 优势

- 备库可写
- 灵活
- 应用简化

3. 启用

3.1 会话级

ALTER SESSION ENABLE ADG_REDIRECT_DML;

3.2 系统级

ALTER SYSTEM SET adg_redirect_dml=true;

3.3 参数

SHOW PARAMETER adg_redirect_dml

4. 工作原理

4.1 流程

1. 备库接收 DML
2. 转发到主库
3. 主库执行
4. Redo 传输回备库
5. 备库应用

4.2 透明

- 应用无感知
- 自动
- 一致

4.3 一致性

- 主库执行
- Redo 同步
- 最终一致

5. 使用

5.1 INSERT

-- 备库
ALTER SESSION ENABLE ADG_REDIRECT_DML;
INSERT INTO emp VALUES (1, 'Alice', 5000);
COMMIT;

5.2 UPDATE

UPDATE emp SET salary = 6000 WHERE id = 1;
COMMIT;

5.3 DELETE

DELETE FROM emp WHERE id = 1;
COMMIT;

6. PL/SQL 重定向

6.1 启用

ALTER SYSTEM SET adg_redirect_plsql=true;

6.2 调用

-- 备库
EXEC my_proc();
-- 转发主库执行

6.3 限制

- 部分 PL/SQL
- 检查
- 评估

7. 限制

7.1 DDL

- 不支持 DDL
- 仅 DML
- 检查

7.2 触发器

- 触发器限制
- 检查
- 评估

7.3 性能

- 网络往返
- 延迟
- 监控

7.4 一致性

- 最终一致
- 延迟
- 评估

8. 应用场景

8.1 报表

- 报表临时表
- 备库写
- 灵活

8.2 应用

- 应用简化
- 备库可写
- 灵活

8.3 维护

- 临时维护
- 备库写
- 灵活

9. 监控

9.1 状态

SELECT name, value FROM v$sysstat 
WHERE name LIKE '%redirect%';

9.2 延迟

SELECT * FROM v$dataguard_stats;

9.3 错误

SELECT * FROM v$system_event 
WHERE event LIKE '%redirect%';

10. 性能

10.1 优势

- 备库可写
- 灵活
- 简化

10.2 开销

- 网络往返
- 延迟
- 监控

10.3 优化

- 批量
- 网络
- 监控

11. 常见问题

11.1 ORA-16397

- 不支持
- 检查版本

11.2 延迟

- 网络往返
- 优化
- 监控

11.3 一致性

- 最终一致
- 延迟
- 评估

12. 最佳实践

  1. 19c+:使用
  2. 报表:临时表
  3. 监控:延迟
  4. 网络:低延迟
  5. 批量:优化
  6. PL/SQL:重定向
  7. 测试:性能
  8. 文档:配置
  9. 评估:场景
  10. 演练:使用

13. 参考资料

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