1.说明
熟悉OGG的都知道,OGG是通过ggs_ddl_trigger_before触发器来捕获DDL操作并同步到目标库中,在一次部署RAC环境两个节点的OGG,要求两个节点部署两套OGG,由于默认情况下创建的DDL触发器名称都是相同,如果OGG管理用户名称不同,这样会出现覆盖情况。
通过实验证明触发器的名称并不影响DDL的同步,也就是我们可以创建一个ggs_ddl_trigger_before_ogg2的触发器来给节点2上的OGG使用。
2.证明
1).删除原来触发器
SQL> drop trigger sys.ggs_ddl_trigger_before_test; Trigger dropped. SQL> select trigger_name from user_triggers where trigger_name='GGS_DDL_TRIGGER_BEFORE'; no rows selected
2).利用脚本创建触发器
脚本可通过以下链接下载:
https://pan.baidu.com/s/1vSWv5N7abP8d_CJzdR6ocg
注:脚本中的用户名是:ogg,如果你的环境管理OGG的用户名不是ogg则需要修改以下。
如:IF "OGG" .DDLReplication.isRecycle(stmt) = 1 THEN IF "OGG" .DDLReplication.trace_level >= 0 THEN "OGG" .trace_put_line ('DDL', 'DDL ignored, it is recycle bin DDL, text [' || stmt || ']'); END IF; IF "OGG" .DDLReplication.sql_trace = 1 THEN dbms_session.set_sql_trace(false); END IF; -- just ignore recyclebin objects "OGG" .DDLReplication.setCtxInfo(-1,-1,-1,-1,-1); RETURN; END IF;
修改脚本中的触发器名称:
CREATE OR REPLACE TRIGGER sys.ggs_ddl_trigger_before_test BEFORE ddl ON DATABASE DECLARE
然后创建触发器
SQL> @ggs_ddl_trigger_before.sql Trigger created.
可以看到触发器已经创建成功
SQL> select trigger_name from user_triggers where trigger_name='GGS_DDL_TRIGGER_BEFORE_TEST'; TRIGGER_NAME ------------------------------------------------------------ GGS_DDL_TRIGGER_BEFORE_TEST
启用触发器
SQL> ALTER TRIGGER sys.ggs_ddl_trigger_before_test enable; Trigger altered.
3).验证DDL同步是否正常
源库将表添加一列SQL> alter table t1 add(b int); Table altered.
目标库:
OGG日志中可以看到:2018-07-31 15:30:03 INFO OGG-01407 Oracle GoldenGate Delivery for Oracle, rpt01.prm: Setting current schema for DDL operation to [test]. 2018-07-31 15:30:03 INFO OGG-00484 Oracle GoldenGate Delivery for Oracle, rpt01.prm: Executing DDL operation. 2018-07-31 15:30:03 INFO OGG-00483 Oracle GoldenGate Delivery for Oracle, rpt01.prm: DDL operation successful. 2018-07-31 15:30:03 INFO OGG-01408 Oracle GoldenGate Delivery for Oracle, rpt01.prm: Restoring current schema for DDL operation to [ogg]
查看表结构:
SQL> desc t1 Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER(38) NAME VARCHAR2(50) AGE NUMBER(38) ADDRESS VARCHAR2(300) A NUMBER(38) B NUMBER(38) --可以看到B字段已经成功同步过来
3.总结
OGG同步DDL操作,对于DDL触发器名称没有要求。
版权声明:本文为博主原创文章,未经博主允许不得转载。
OGG 触发器 ggs_ddl_trigger_before