利用GoldenGate,可以獲取到變更記錄在源端對應的redo日誌序號,redo中的地址RBA,如果源端是RAC,還可以拿到源端節點的編號,通過這3個值,可以定位該變更記錄的唯一性。
這些資訊,在GoldenGate抽取時,可以通過內建函式獲取得到,然後寫入到trail中,從而在目標端通過token函式從trail得到相關資料,然後插入到目標表中形成唯一鍵。
如下示例:
源端抽取的配置
TABLE src.table, TOKENS (
redoseq = @GETENV('RECORD','FILESEQNO'),
redorba = @GETENV('RECORD', 'FILERBA'),
redothread = @GETENV('TRANSACTION', 'REDOTHREAD'));
這樣,在trail中的table表,就會附加上對應的這3條資訊。然後在目標端的表,新增3個欄位,儲存這3條資訊,可以通過 TOKEN 獲取得到。
目標端配置
map src.table, target tgt.table2, colmap(useDefaults,
redoseq=@TOKEN('redoseq'), redoseq=@TOKEN('redoseq'), redoseq=@TOKEN('redoseq'));
針對java adapter介面或big data定製開發平臺,可使用 op.getToken(userTokenName) 得到token值。
ref: https://blogs.oracle.com/dataintegration/ogg-custom-adapters%3a-how-to-include-a-unique-identifier-for-every-record-in-custom-adapter
Refer to documentation: https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_datainteg.htm#GWUAD468,