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

最近在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



请使用浏览器的分享功能分享到微信等