ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步

darren__chan發表於2019-09-07

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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-2656381/,如需轉載,請註明出處,否則將追究法律責任。

相關文章