您可以在Active Data Guard备用数据库上运行DML操作。这使您可以在备用数据库上运行只读应用程序,偶尔执行DML。
备用数据库上的DML操作可以透明地重定向到主数据库并在主数据库上运行。这包括属于PL / SQL块的DML语句。Active Data Guard会话将等待,直到将相应的更改发送到Active Data Guard备用数据库并应用到其中。在DML操作期间将保持读取一致性,并且运行DML的备用数据库可以查看其未提交的更改。但是,所有其他备用数据库实例只有在提交事务后才能查看这些更改。
注意:避免在Active Data Guard备用数据库上也运行DML操作。因为操作实际上是在主数据库上执行的,所以太多的DML可能会影响主数据库的性能。
注意:Active Data Guard备用数据库不支持Oracle XA事务中的DML操作。
DML操作自动重定向到主要对象可以在系统级别或会话级别进行配置。会话级别设置将覆盖系统级别设置。
要为Active Data Guard环境中的所有备用会话配置DML操作的自动重定向,请执行以下操作:
将ADG_REDIRECT_DML初始化参数设置为TRUE。
要为当前会话配置DML操作的自动重定向,请使用以下命令:
ALTER SESSION ENABLE ADG_REDIRECT_DML;
复制
示例1在物理备用数据库上执行DML操作
Active Data Guard设置中的物理备用数据库包含一个名为的表employees。您可以通过在Active Data Guard环境中的物理备用数据库上运行DML来向该表中插入行。
在备用数据库上,为当前会话启用DML重定向:
SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;
复制
employees使用以下命令向表中添加一行:
SQL> INSERT INTO employees VALUES (.......);
复制
此时,更改的数据仅对运行该命令的备用数据库可见。在主数据库上执行插入操作后,所做的更改将被发回并应用于所有备用数据库。