Oracle 19c Data Guard DML Redirection ADG备库上执行DML重定向(未来更好的进行读写分离)
资料来自官方网站:
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-B1C66720-3EA6-45A3-986E-6E510381EC79
在19c之前,oracle Data Guard备用数据库上不能执行DML操作,但是,从19c开始备库就可以进行DML操作了;个人觉得象征意思确实很大,相当于未来的oracle是更智能,高效,高可用,甚至是更好的读写分离。
Active Data Guard备用数据库上运行DML操作,可以在备用数据库上运行只读应用程序,偶尔执行DML(太频繁影响主库性能),备库上的DML操作可以透明地重定向到主数据库并在主数据库上运行。也包括PL/SQL块中的DML语句。Active Data Guard会话将等待,直到将相应的更改发送到Active Data Guard备用数据库并将其应用于Active Data Guard备用数据库为止。在DML操作期间将保持读取一致性,并且运行DML的备用数据库可以查看其未提交的更改。但是,所有其他备用数据库实例只有在提交事务后才能查看这些更改。
整体的步骤如下:
1.备库的客户端发起DML操作。
2.DML操作被重定向到主库。
3.DML在主库被实施。
4.生成更改的redo传到备库。
5.完成DML重定向,客户端显示修改后的数据信息。
DML操作自动重定向到主要对象可以在系统级别或会话级别进行配置。会话级别设置将覆盖系统级别设置。要为Active Data Guard环境中的所有备用会话配置DML操作的自动重定向,请执行以下操作:
- 将
ADG_REDIRECT_DML初始化参数设置为TRUE。
要为当前会话配置DML操作的自动重定向,请使用以下命令:
ALTER SESSION ENABLE ADG_REDIRECT_DML;
先决条件:
1.配置好dg_broker
2.sys用户不支持备库DML操作的自动重定向。
一.配置dg_broker
来自官方论坛:https://docs.oracle.com/cd/B28359_01/server.111/b28295/cli.htm#i1005666
我的dg最开始没有配置,所以先要配置 dg_broker。
1.1入门先决条件(参数修改)
使用DGMGRL的先决条件是主库和备库必须已经安装好,DG_BROKER_START必须TRUE为配置中的所有数据库将初始化参数设置为。
alter system set dg_broker_start=true scope=both; --主备开启dg_broker_start

1.2.主备库配置db_broker
备库上连接到主库操作
主库数据库唯一名以及tns连接串名都是:orcl
备库数据库唯一名以及tns连接串名都是:orcldg
dg_broker 配置 orcl_brk_config
dgmgrl
connect sys/密码@orcl
--把主库添加到dg_broker,备库上连接到主库操作

备库执行:
alter system set log_archive_dest_2=''; --备库我关闭了log_archive_dest_2由于服务名字符串一样。


CREATE CONFIGURATION 'orcl_brk_config' AS PRIMARY DATABASE IS 'orcl' CONNECT IDENTIFIER IS orcl;
show CONFIGURATION

--把备库添加到dg_broker,仍然是连接到备库上
ADD DATABASE orcldg AS CONNECT IDENTIFIER IS orcldg MAINTAINED AS PHYSICAL;
启用
show configuration;
ENABLE CONFIGURATION;

show database orcl;
show database orcldg

二.Data Guard备用数据库上执行DML重定向操作
操作如下:
select database_role from v$database;
show parameter ADG_REDIRECT_DML;

alter system set adg_redirect_dml=true scope=both;
重启备库


select database_role from v$database;
select open_mode from v$database;
show parameter ADG_REDIRECT_DML;
ALTER SESSION ENABLE ADG_REDIRECT_DML;
insert into dg_test select rownum from dual connect by rownum <=100;

在测试当主,我测试了sys用户不支持备库DML操作的自动重定向。
select database_role from v$database;
select open_mode from v$database;
show parameter ADG_REDIRECT_DML;
ALTER SESSION ENABLE ADG_REDIRECT_DML;
insert into test select rownum from dual connect by rownum <=100;

结论:
避免在Active Data Guard备用数据库上也运行DML操作。因为操作实际上是在主数据库上执行的,所以太多的DML可能会影响主数据库的性能。
三.错误提示ORA-16397

[oracle@19cdg ~]$ 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的过程
我在备库执行update 语句,但是不提交,查看整个会话过程。
可以做个10046 trace看看,我是直接进行会话查询。
sqlplus racttfc/oracle@orcldg
show user;
select database_role from v$database;
select open_mode from v$database;
ALTER SESSION ENABLE ADG_REDIRECT_DML;
update dg_test set id=1 where id>50;

SELECT username, final_blocking_session, final_blocking_instance, event lockwait, status, machine, service_name , sql_id FROM gv$session WHERE username IS NOT NULL;

insert into dg_test select rownum from dual connect by rownum <=100000;

commit;
update dg_test set id=1 where id>50;

select sql_text from v$sql where sql_id in ('8xn0mav2kq662','0f35avqs2973b');

整个备库执行DML语句都是被重定向到主库,DML在主库被实施,然后再返回备库,但是要是备库执行大量的DML语句,肯定会影响到主库的性能,所以只适合适量的dml,可以把此场景用到备库主要做大量查询,偶尔进行修改的业务场景。
Oracle 19c Data Guard DML Redirection ADG备库上执行DML重定向(未来更好的进行读写分离)的更多相关文章
- Oracle11gr2_ADG管理之在备库上模拟failover的过程实战
技术建议和方案. 要求failover后不重建备库,并能够把failover的数据库重新切换回备库 主库为newtest,备库为snewtest 备库上已经开启了闪回 得到一个参考的SCN SQL&g ...
- [置顶] Oracle 11g Data Guard Role Transitions: Failover
Role TransitionsInvolving Physical Standby Databases A database operates in one of the following mut ...
- 记一次ADG备库归档目录满导致的延时处理
报错如下,原因是存放传过来的归档的目录+HWAREDODG满了,MRP进程无法应用归档,我在手动传了几个归档之后发现不是GAP,select * from V$ARCHIVE_GAP 显示没有GAP. ...
- ORACLE 11.2.0.4 Single To Single Data Guard 安装 physical standby
[root@ORACLE ~]# su - oracle [oracle@ORACLE ~]$ sqlplus / as sysdba . 查看主库归档模式: SQL> select log_m ...
- Oracle Data Guard 创建物理Standby数据库
创建物理备库 机器名 a1 a2 IP: 192 ...
- data guard switchover切换异常
data guard switchover切换异常 查看DG数据库备份库发现,switchover_status为SWITCHOVER LATENT SQL> select OPEN_MODE, ...
- 【DataGuard】部署Data Guard相关参数详解 (转载)
原文地址:[DataGuard]部署Data Guard相关参数详解 作者:secooler 有关物理Data Guard部署参考<[DataGuard]同一台主机实现物理Data Gua ...
- (摘录)data guard switchover切换异常
查看DG数据库备份库发现,switchover_status为SWITCHOVER LATENT SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION ...
- KingbaseES R3集群备库执行sys_backup.sh物理备份案例
案例说明: KingbaseES R3的后期版本支持通过sys_backup.sh执行sys_rman的物理备份,实际上是调用了sys_rman_v6的工具做物理备份.本案例是在备库上执行集群的备份, ...
随机推荐
- Mila Fletcher:日常理财应注意的五点
米拉·弗莱彻于2007年毕业于耶鲁大学,她是一名真正意义上的法学博士,在校期间获得了马歇尔奖学金,毕业后曾在美国多家知名律师事务所任职,目前就职于星盟全球投资公司,专注于帮助公司和客户提供法务咨询,他 ...
- BGV等 DeFi产品暴涨背后隐藏着什么?
比特币突破两万七千美金,在此创造了历史.在比特币一路飙升的背后,到底是谁注入了"强心针".笔者认为今年以来推动BTC长期上涨的主要动力主要包括四个:经济形势恶化.央行大量放水(主要 ...
- oracle中的in参数超过1000的解决方案
在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出"java.sql.SQLException: ORA-01795: 列表中 ...
- 开源OA办公平台搭建教程:基于nginx的快速集群部署——端口分发
主机信息 主机1:172.16.98.8(linux) 主机2:172.16.98.9(linux) 集群需求 172.16.98.8:WEB服务器,应用服务器,文件存储服务器,中心服务器 172.1 ...
- 处理XML数据应用实践
摘要:GaussDB(DWS)支持XML数据类型及丰富的XML解析函数,可实现关系数据和XML数据的映射管理功能. XML概述 XML是可扩展的标识语言(eXtensible Markup Langu ...
- Svelte 码半功倍
你未注意到的最重要的指标. 注意:原文发表于2019-04-20,随着框架不断演进,部分内容可能已不适用. 所有代码都有 BUG,你写的越多,BUG 越多,这很合情合理. 同时,写的越多,费时越多,留 ...
- 求幂&&快速幂&&位运算
1.普通的求幂方法: 时间复杂度为O(n),对于比较大的数在1s限时内可能会TLE int pow(int base,int p){ int ans=1; for(int i=1;i<=p;i+ ...
- C#.NET操作数据库通用类
下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...
- Kafka集群消息积压问题及处理策略
通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafka分区之间的数据是均匀分布的. 在分区数据均匀分布的前提下,如果我们针对要处理 ...
- 11. webpack配置Vue
一. 在webpack中配置vue 了解了webpack的原理和用法以后, 我们来引入Vue webpack原理和用法详解链接: cnblogs.com/ITPower/p/14467745.html ...