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. 最佳实践
- 19c+:使用
- 报表:临时表
- 监控:延迟
- 网络:低延迟
- 批量:优化
- PL/SQL:重定向
- 测试:性能
- 文档:配置
- 评估:场景
- 演练:使用
13. 参考资料
[1] Oracle Active Data Guard 19c, “DML Redirection” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/