ogg在异构数据库实时双向同步中如何防止数据死循环同步

来源:这里教程网 时间:2026-03-03 14:13:14 作者:

最近在ORACLE 到MYSQL的使用OGG进行数据迁移中遇到了数据在双向同步数据死循环的问题,在正常对oracle的同步上,我们使用以下参数来防止抽取进程对复制进程提交的事务进行抽取:

TRANLOGOPTIONS EXCLUDEUSER OGG
GETAPPLOPS 
IGNOREREPLICATES

实际上 tranlogoptions excludeuser OGG 的作用是在抽取日志时排除掉OGG用户, GETAPPLOPS 指抓取应用的事务, IGNOREREPLICATES是忽略掉复制进程的事务。

GETAPPLOPS | IGNOREAPPLOPS: Controls whether or not data operations (DML) produced by business 
 applications except Replicat are included in the content that Extract writes to a specific trail or file. 
GETREPLICATES | IGNOREREPLICATES: Controls whether or not DML operations produced by Replicat are included in 
the content that Extract writes to a specific trail or file.

但到了MYSQL 端进行抽取发现抽取进程不支持tranlogoptions excludeuser参数,此时即使加了 IGNOREREPLICATES因识别不到复制进程而不生效。导致mysql 往 oracle同步时仍会抽取掉一部分数据往oracle走,而在我的 ORACLE 到MYSQL的同步中我实际是的关系是 O ———>O————>M 之后M再分别往两个O同步。 在《Administering Oracle GoldenGate for Windows and UNIX》手册上 9.3 Preventing Data Looping中介绍了各种数据库端如何识别复制进程的的参数,可以来防止抽取进程抽取复制进程的事务: DB2 z/OS, DB2 LUW, DB2 for i, and Informix TRANLOGOPTIONS EXCLUDEUSER user Informix中需要特别使用  EXCLUDEUSERID Database_uid MySQL and NonStop SQL/MX TRANLOGOPTIONS FILTERTABLE table_name 这个 table_name是指checkpointtable Oracle 在复制进程设置标签,例如   DBOPTIONS SETTAG 0935  然后在抽取进程排除标签   TRANLOGOPTIONS EXCLUDETAG 0935 如果有多个标签,抽取进程必须每个都加上 当然也可用使用排除用户的 TRANLOGOPTIONS EXCLUDEUSER  user SQL Server TRANLOGOPTIONS EXCLUDETRANS transaction_name 这个事务名不理解,如果未设置应该默认的事务名是 ggs_repl.。原文解释: This parameter statement is only required if the Replicat transaction name is set to something other than the default of ggs_repl . Sybase TRANLOGOPTIONS EXCLUDETRANS transaction name or TRANLOGOPTIONS EXCLUDEUSER user name

相关推荐