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 的異常.
參考:
說明
在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 Data Guard基礎運維-08 DML重定向Oracle運維
- [20211013]Oracle 19c新特性Listener自動清理(Network Log File Segmentation).txtOracleSegmentation
- LightDB23.1新特性支援Oracle hint增強DB2Oracle
- 1 Oracle Database 19c 新特性OracleDatabase
- Redis的讀寫分離Redis
- 【19c】Oracle 19c 和 20c 的新特性解密Oracle解密
- Oracle ADG 自動切換指令碼分享Oracle指令碼
- openPower伺服器搭建Oracle 19c adg伺服器Oracle
- oracle 19C新特性——混合分割槽表Oracle
- Oracle:19c 新特性——Memoptimized Rowstore 簡介OracleZed
- Oracle 19c adg全庫遷移資料Oracle
- ORACLE 19c 新特性之混合分割槽表Oracle
- Java 16 新特性:instanceof增強Java
- 深度解讀 MongoDB 最全面的增強版本 4.4 新特性MongoDB
- ABAP 740新的OPEN SQL增強特性SQL
- C# 9 新特性 —— 增強的 foreachC#
- KunlunBase 讀寫分離方案
- Laravel讀寫分離原理Laravel
- discuz 配置讀寫分離(主寫從讀)
- Orchestrator+Proxysql 實現自動導換+應用透明讀寫分離SQL
- 12.2新特性之ADG多節點啟動MRP程式
- 探究MySQL MGR的讀寫分離MySql
- MySQL 讀寫分離的好處MySql
- MyCat分庫分表、讀寫分離
- Oracle Database 19c中的自動索引OracleDatabase索引
- Oracle 19c和20c新特性最全解密Oracle解密
- ORACLE 18C 19C 20C新特性Oracle
- 【kingsql分享】Oracle Database 19c的各種新特性介紹SQLOracleDatabase
- 資料庫治理利器:動態讀寫分離資料庫
- G008-ORACLE-DG ORACLE 19C Active Data Guard DML RedirectionOracle
- 資料讀寫壓力大,讀寫分離
- 華納雲:雲資料庫中自動讀寫分離是什麼?資料庫
- C# 9 新特性 —— 增強的模式匹配C#模式
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- 位元組面試:什麼是讀寫分離?讀寫分離的底層如何實現?面試
- 資料庫讀寫分離資料庫
- 【Mongo】Mongo讀寫分離的實現Go
- mysql讀寫分離的最佳實踐MySql