Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML
Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML
Oracle 19c 新特性之一,adg的自动 dml 重定向.就是在 ADG 环境下,连接到 standby 的数据库执行 dml.
这个特性在 18c 是作为隐含参数 _enable_proxy_adg_redirect 调整的,
但在 19c 中,通过显式参数 ADG_REDIRECT_DML 参数调整.
SQL> show parameter adg_redirect_dml;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
adg_redirect_dml boolean FALSE
默认是 false
在 primary 和 standby 都均打开
SQL> alter system set adg_redirect_dml = true scope = both sid = '*';
测试后发现是通过 dblink 的方式去 primay 执行 dml,所以需要监控 standby 的 2pc 的异常.
参考:
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/ADG_REDIRECT_DML.html#GUID-AC98F026-33BE-41FE-8F2F-EFA296723AD8
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/release-changes.html#GUID-509A6343-5882-4260-BAD0-DC6B2BDC8301
说明
在19c版本中,ADG中的备库支持DML操作,原理是:是通过将备库上的DML重定向到主库上执行,然后备库应用DML变化数据,至此完成备库DML操作。
注:避免在备库上执行过多的DML操作,实际上是在主库上执行。
不支持XA事务中的DML操作。
配置
自动重定向DML操作支持会话级别和系统级别,会话级别会覆盖系统级别配置。
在所有备库上启用DML重定向
将初始化参数ADG_REDIRECT_DML设置为true
ALTER SYSTEM SET ADG_REDIRECT_DML=true SCOPE=BOTH;
当前会话启用DML重定向
ALTER SESSION ENABLE ADG_REDIRECT_DML;
具体例子
会话级别的DML重定向
确认当前数据库角色
SQL> select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------------------------------------- --------------------------------
READ ONLY WITH APPLY PHYSICAL STANDBY
在备库上启用会话级别DML重定向
SQL> conn system/oracle --非sys用户
Connected.
SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;
Session altered.
确认表数据
SQL> select * from test;
no rows selected
在备库上执行DML操作
SQL> insert into test values(1);
1 row created.
SQL> select * from test;
ID
----------
1
注意:不支持sys用户会话启用:ORA-16397: statement redirection from Oracle Active Data Guard standby database to primary database failed
错误可能原因:
[oracle@19dg_p admin]$ oerr ORA 16397
16397, 00000, "statement redirection from Oracle Active Data Guard standby database to primary database failed"
// *Cause: The statement redirection failed because of one of the following reasons:
// 1. The primary database connect string was not established.
// 2. The primary database could not be reached.
// 3. The undo-mode or incarnation were not the same.
// 4. The current user and logged-in user were not the same.
// 5. Redirecting CREATE TABLE AS SELECT (CTAS) of the global temporary
// table was not supported.
// 6. Redirecting PL/SQL execution having bind variable was not supported.
// *Action: Run the statement after fixing the condition that caused the failure.
系统级别启用DML重定向
查看ADG_REDIRECT_DML参数值
SQL> SHOW PARAMETER ADG_REDIRECT_DML;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
adg_redirect_dml boolean
FALSE
在备库上设置为true
SQL> ALTER SYSTEM SET ADG_REDIRECT_DML=true SCOPE=BOTH;
System altered.
执行DML
SQL> conn system/oracle
Connected.
SQL> insert into system.test values(2);
1 row created.
SQL> COMMIT;
Commit complete.
验证数据
SQL> select * from system.test;
ID
----------
1
2
以上就是关于ADG中备库DML重定向特性测试,
在前面的文章《 Oracle 19c 十大新特性一览》中,我们曾经提到 Oracle 19c的一个重要增强,就是ADG的自动DML转发:
这个新特性的功能是: 将偶然发送到ADG上的DML操作,自动转发到主库执行,然后通过主库日志传递到备库实时应用,在保证了ACID的前提下,大大增强了备库的实用性,这被称为 DML Redirection 。
其实这个特性在 Oracle 18c 中就已经提供,所以我们不必等到 19c 就能够体验到这个特性。
在两个版本中,唯一的差别是:
在 18c 中,这个特性是通过隐含参数 _enable_proxy_adg_redirect 的调整来启用这个特性,这表示此特性是趋向内部的;
在 19c 中,显式参数 ADG_REDIRECT_DML 参数控制这个特性的开关,说明这个特性变成外部和成熟的;
来看一下测试,体验一下这个新特性的便利性。首先在主库建立测试表,插入测试数据:
[oracle@18.0.0]$ export ORACLE_SID=DB18C
[oracle@18.0.0]$ sqlplus / as sysdba
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
SQL> create user eygle identified by eygle;
User created.
SQL> grant connect,resource,dba to eygle;
Grant succeeded.
SQL> connect eygle/eygle
Connected.
SQL> create table enmotech (id number,name varchar2(20));
Table created.
SQL> insert into enmotech values(1,'EYGLE');
1 row created.
SQL> commit;
Commit complete.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
接下来在备库中就设置了参数之后,就可以针对表执行DML操作了,注意备库需要置于 实时应用状态:
[oracle@18.0.0]$ export ORACLE_SID=DB18C_S
[oracle@18.0.0]$ sqlplus eygle/eygle
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL> select * from enmotech;
ID NAME
---------- --------------------
1 EYGLE
SQL> alter session set "_enable_proxy_adg_redirect"=true;
Session altered.
SQL> show parameter redirect
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_adg_redirect_flags integer 1
_enable_proxy_adg_redirect boolean TRUE
-- 此处启用跟踪,可以分析 ADG 重定向的工作原理
SQL> alter session set events '10046 trace name context forever ,level 12';
Session altered.
--此处的DML操作可以顺利执行
SQL> insert into enmotech values(2,'YANGTINGKUN');
1 row created.
SQL> select * from enmotech;
ID NAME
---------- --------------------
1 EYGLE
2 YANGTINGKUN
SQL> commit;
Commit complete.
在以上测试中,可以通过设置10046跟踪,以获得后台的递归执行,研究这个特性的工作原理。
也可以设置终端输出时间,评估重定向的延时,我的测试环境搭建在同一台主机,基本上DML操作的延时在1秒左右,偶发情况下是完全可以接受的:
SQL> set timing on
SQL> insert into enmotech values(2,'KAMUS');
1 row created.
Elapsed: 00:00:01.05
SQL> select * from enmotech;
ID NAME
---------- --------------------
1 EYGLE
2 YANGTINGKUN
2 KAMUS
Elapsed: 00:00:00.00
SQL> commit;
Commit complete.
Elapsed: 00:00:01.05
通过后台的跟踪日志,可以看到,DML操作是通过DB Link来重定向到主库执行的,这个DB Link是内部的,在服务名等配置正常情况下,Oracle能够自动完成内部操作,如果配置错误则会出现错误:
=====================
PARSING IN CURSOR #139880746795960 len=44 dep=0 uid=107 oct=2 lid=107 tim=45368825051292 hv=3193100945 ad='674870e8' sqlid='3bg4wy2z55qnj'
insert into enmotech values(2,'YANGTINGKUN')
END OF STMT
PARSE #139880746795960:c=44993,e=1721825,p=1,cr=28,cu=6,mis=1,r=0,dep=0,og=1,plh=0
WAIT #139880746795960: nam='SQL*Net message to dblink' ela= 2
WAIT #139880746795960: nam='SQL*Net message from dblink' ela= 1164
EXEC #139880746795960:c=1000,e=1297,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0
WAIT #139880746795960: nam='SQL*Net message to dblink' ela= 1
WAIT #139880746795960: nam='SQL*Net vector data to dblink' ela= 82
WAIT #139880746795960: nam='SQL*Net message from dblink' ela= 1280
*** 2019-01-10T21:08:37.292860+08:00
WAIT #139880746795960: nam='standby query scn advance' ela= 850283
WAIT #139880746795960: nam='PGA memory operation' ela= 98 p1=0 p2=0
WAIT #139880746795960: nam='SQL*Net message to client' ela= 2 d
=====================
PARSING IN CURSOR #139880746795960 len=6 dep=0 uid=107 oct=44 lid=107 tim=45368881823728 hv=3480936638 ad='0' sqlid='23wm3kz7rps5y'
commit
END OF STMT
PARSE #139880746795960:c=0,e=150,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=0
XCTEND rlbk=0, rd_only=1, tim=45368881823795
WAIT #139880746795960: nam='SQL*Net message to dblink' ela= 2
WAIT #139880746795960: nam='SQL*Net message from dblink' ela= 1598
*** 2019-01-10T21:09:34.259699+08:00
WAIT #139880746795960: nam='standby query scn advance' ela= 1045191
EXEC #139880746795960:c=1000,e=1047570,p=0,cr=0,cu=4,mis=0,r=0,dep=0,og=0,plh=0
WAIT #139880746795960: nam='SQL*Net message to client' ela= 3
除了常规表之外,Oracle 还支持在备库创建全局临时表, 在19c中,隐含参数 _alter_adg_redirect_behavior 可以用于定义允许重定向的级别,例如当设置 disallow_gtt 将不允许重定向全局临时表。
ADG 中 DML 重定向新特性带来的另外一个问题时,以后部署ADG时,必须注意备库安全管控,否则滥发到备库的DML可能损害主库的一致性。
About Me
........................................................................................................................ ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除 ● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文博客园地址: http://www.cnblogs.com/lhrbest ● 本文CSDN地址: https://blog.csdn.net/lihuarongaini ● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群号: 230161599 、618766405 ● 微 信群:可加我微 信,我拉大家进群,非诚勿扰 ● 联系我请加QQ好友 ( 646634621 ),注明添加缘由 ● 于 2019-09-01 06:00 ~ 2019-09-31 24:00 在西安完成 ● 最新修改时间:2019-09-01 06:00 ~ 2019-09-31 24:00 ● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 ● 版权所有,欢迎分享本文,转载请保留出处 ........................................................................................................................ ● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/ ........................................................................................................................ 使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。 ........................................................................................................................ |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2656071/,如需转载,请注明出处,否则将追究法律责任。
Oracle 19c 新特性:ADG的自动DML重定向增强读写分离--ADG_REDIRECT_DML相关推荐
- Oracle 19c 新特性:ADG的自动DML重定向增强读写分离
在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强,就是ADG的自动DML转发: 这个新特性的功能是:将偶然发送到ADG上的DML操作 ...
- oracle dataguard详解,Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向
Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向 在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强, ...
- Oracle 19c 新特性 —— 自动索引 Automatic indexing
自动索引功能可自动执行Oracle数据库中的索引管理任务.根据应用程序工作负载的变化自动创建.重建和删除数据库中的索引,从而提高数据库性能. Automatic indexing特性对于on-prem ...
- 快讯:Oracle 19c 新特性及官方文档抢鲜下载
随着2月的春风吹拂,Oracle 19c 的第一个 Exadata 版本发布将马上发布出来,等待可测试版本的朋友们马上即可如愿了. 目前官方文档已经可以公开下载到,我为大家整理了一些重要文档,包括概念 ...
- oracle19自动索引,Oracle 19c 新特性详解:自动索引(Automatic Indexing)的输出报告范例...
[email protected]>set serveroutput on [email protected]>declare 2 report clob := null; 3 begin ...
- Oracle 19c 新特性:自动化索引 Automatic indexing 实践
老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...
- Oracle 19C新特性测试之滚动升级
从Oracle的12.1或12.2版本升级到最新的19c版本,目前可供选择的几种升级方案有: 1.插拔式升级,通用性好,属于数据迁移式的升级方式,不能整库进行升级,数据量越大耗时越长,业务中断时间长. ...
- Oracle 19c 新特性:混合分区表Hybrid partitioned tables强体验
老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...
- Oracle 19c 新特性 —— 混合分区表Hybrid partitioned tables
简介 从19c开始,Oracle数据库支持Hybrid partitioned tables,也就是混合分区表,进一步扩展了Oracle分区技术.这里的混合指的是数据的分布,分区表的分区可以一些位于数 ...
最新文章
- linux 后台运行jar SpringBoot
- 变量和指针——学习笔记
- 分布式ID-数据库多主模式
- Python多线程--UDP聊天器
- 使用netty实现聊天室功能
- python网络编程系列
- P2P网贷第三方托管模式存在5大缺陷,护法是最大的赢家
- 软件项目详细设计方案怎么写?
- AD14使用过程记录!
- chrome redhat 下载源_RedHat 7.0 Chrome浏览器 安装
- 未来教育考试系统无法答题,点击选项后没有反应,不会记录答题
- 使用UNIAPP开发APP教程-01框架搭建
- Xilinx SDSoc 加载opencv库
- 绝对值编码器与增量式编码器简析
- OSPF协议介绍及配置
- Redis应用项目---抢红包功能(三)
- 笔记本用一段时间tapc耳机之后再用圆孔没反应。
- 防止360浏览器小窗下载视频
- 晁盖与吴用 3gp转换软件
- 电信诈骗为何如此难以根治?
热门文章
- 伽马校正(gamma correction)学习笔记
- 酒店智能联网门锁解决方案
- 蓝桥杯十大常见天阶功法——虫之呼吸.贰之型.二分
- python发微信提醒天气冷了注意保暖_提醒人注意保暖的句子 天气冷了注意保暖句子...
- 数理逻辑3 -- 形式数论13
- NB-IoT网络规划过程
- 69节入门python_小渣渣学习笔记 python day69 【Django】
- 服务器修改ip为什么需要重启,xp修改ip需要重启 - 卡饭网
- Linux基础,系统概叙与虚拟机搭建+CentOS系统安装(建议收藏)
- 《Fluent Python》学习笔记:第 8 章 对象引用、可变性和垃圾回收