联系:手机/微信(+86 17813235971) QQ(107644445)
标题:Oracle 19C 备库DML重定向—DML Redirection
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
在19c之前,oracle Data Guard备用数据库上不能执行DML操作,但是,从19c开始备库就可以进行DML操作了;Active Data Guard备用数据库上运行DML操作,可以在备用数据库上运行只读应用程序,偶尔执行DML(太频繁影响主库性能),备库上的DML操作可以透明地重定向到主数据库并在主数据库上运行。也包括PL/SQL块中的DML语句。Active Data Guard会话将等待,直到将相应的更改发送到Active Data Guard备用数据库并将其应用于Active Data Guard备用数据库为止。在DML操作期间将保持读取一致性,并且运行DML的备用数据库可以查看其未提交的更改。但是,所有其他备用数据库实例只有在提交事务后才能查看这些更改。
在主库上创建测试表
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- BANNER_FULL -------------------------------------------------------------------------------- BANNER_LEGACY -------------------------------------------------------------------------------- CON_ID ---------- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.5.0.0.0 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0 SQL> select database_role ,open_mode from v$database; DATABASE_ROLE OPEN_MODE ---------------- -------------------- PRIMARY READ WRITE SQL> create table system.t_xff as select * from dba_objects; Table created. SQL> select count(*) from system.t_xff; COUNT(*) ---------- 72407
在备库上进行dml操作
SQL> select database_role ,open_mode from v$database; DATABASE_ROLE OPEN_MODE ---------------- -------------------- PHYSICAL STANDBY READ ONLY WITH APPLY SQL> select count(*) from system.t_xff; COUNT(*) ---------- 72407 SQL> alter session enable adg_redirect_dml; Session altered. SQL> delete from system.t_xff; 72407 rows deleted. SQL> commit; Commit complete.
在主库上验证备库dml操作结果
SQL> select count(*) from system.t_xff; COUNT(*) ---------- 0 SQL>
在18c中可以通过_enable_proxy_adg_redirect隐含参数实现dml重定向