ITPub博客

首页 > 数据库 > Oracle > Oracle 19c Active Data Guard DML 重定向:让只读备库也能“写”!

Oracle 19c Active Data Guard DML 重定向:让只读备库也能“写”!

原创 Oracle 作者:marui 时间:2026-06-24 16:28:29 0 删除 编辑

大家好,我是 睿 。

 

在传统的 Active Data Guard ( ADG )中,备库只能做只读查询,这让很多“读多写少”的应用场景非常痛苦——报表系统偶尔要写点临时数据,就得切到主库,增加主库压力。

 

Oracle 19c 正式引入的 DML Redirection ( DML 重定向)特性完美解决了这个问题:在备库执行 DML 时, Oracle 会自动把操作重定向到主库执行,执行完后再把结果同步回备库,对应用几乎透明!

 

今天这篇文章带你从原理到实战,完整玩转这个特性。

 

一、什么是 ADG DML 重定向?

 

DML Redirection 允许在 Active Data Guard 物理备库( READ ONLY 模式)上执行 DML ( INSERT/UPDATE/DELETE )操作。

 

工作原理( 5 步流程):

 

1. 客户端在备库发出 DML ;

2. 备库检测到 DML ,通过内部 DB Link (名称必须为 ADGREDIRECT )把语句发送到主库;

3. 主库执行 DML 并产生 Redo ;

4. Redo 通过 Data Guard 传输到备库并应用;

5. 备库会话等待 Redo 应用完成后,返回结果给客户端。

 

核心优势:

1. 实现真正 的 Read-Mostly 负载分担

2 . 减少主库压力

3 . 应用无需修改连接字符串

4 . 保持 ACID 特性

 

Oracle 官方建议:仅用于偶尔的 DML (建议重定向 DML 占比 < 10% ),避免对主库造成额外负担。

 

二、前置条件

 

1. 主备均为 19c 及以上版本

2. 备库必须是 Active Data Guard ( READ ONLY WITH APPLY )

3. 主备网络连通(备库能连到主库)

4. 备库处于实时应用模式( Real-time Apply )

 

查看备库状态:

SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS,
       PROTECTION_MODE, FLASHBACK_ON
FROM V$DATABASE;

 

三、配置步骤

 

1. 在备库启用 DML 重定向

-- 系统级启用(推荐,大多数场景)

ALTER SYSTEM SET ADG_REDIRECT_DML = TRUE SCOPE=BOTH;


该参数动态生效,无需重启数据库!

 

2. 创建 Public DB Link

 

必须在主库创建(会通过 Redo 同步到备库),名称固定为 ADGREDIRECT 。

-- 先删除旧的(如果存在)
DROP PUBLIC DATABASE LINK ADGREDIRECT;
 
-- 创建
CREATE PUBLIC DATABASE LINK ADGREDIRECT
CONNECT TO system IDENTIFIED BY "你的密码"
USING '(DESCRIPTION=
         (ADDRESS=(PROTOCOL=TCP)(HOST=主库IP)(PORT=1521))
         (CONNECT_DATA=(SERVICE_NAME=你的服务名))
       )';

注意事项:

<1> 使用有足够权限的用户

<2> 监控主库负载和备库 Apply 延迟

 

3. 测试验证

 

使用非 SYS 用户在备库执行 DML :

sqlplus mary/oracle
SQL> INSERT INTO mary.test VALUES (1, 'test_dml_redirect');
1 row created.
 
SQL> COMMIT;
Commit complete.
 
然后在主库查询验证:
 
SQL> SELECT * FROM test.test;


四、总结:

Oracle 19c 的 ADG DML Redirection 是 Active Data Guard 的重大进化,让备库从纯只读真正走向读为主、偶尔可写,极大提升了投资回报率,通常适用于 报表系统偶尔需要写中间结果表 、 低频配置表更新 等场景。

 

掌握这个特性后,你可以更放心地把读写混合的负载压到备库,解放主库资源。

 

点赞 + 转发 + 关注,下期我们继续分享!

评论区告诉我:你在生产环境中是否已经启用 ADG DML 重定向功能?最希望把哪类操作迁移到备库执行?

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047128/viewspace-3174349/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
要得到你想要的某样东西,最可靠的办法是让你自己配得上它。

注册时间:2025-07-21

  • 博文量
    30
  • 访问量
    31692