備機個別數據同步失敗無任何顯示|參數handlecollisions的作用

1.問題描述

在備機側,明明有幾條數據同步不成功,但在ggserr.log和discard文件中都沒有顯示。

2.handlecollisions參數的原因

參數的作用:控制replicat進程是否自動處理數據重複或數據丟失的衝突。
parameters to control whether or not Replicat tries to resolve duplicate-record and missing-recorderrors when applying SQL on the target.

3.HANDLECOLLISIONS如何工作

分了3種情況:

  1. 如果是keycols更新:
    1)如果舊主鍵不在目標表:則update轉換成insert
    2)如果新主鍵已在目標表:先刪除舊主鍵的記錄,然後覆蓋新主鍵的記錄。(舊主鍵的在源端已不存在,所以刪除;新主鍵的記錄,可以當做update)
  2. 如果是主鍵(或keycols)重複錯誤:
    用trail的記錄覆蓋目標表記錄。
  3. 如果是找不到記錄的錯誤:
    如update、delete,丟棄,但不反映在discard文件中。

可以看出來,handlecollisions還是很“體貼”的,考慮了數據不一致的各種情況。

4.用法

1.可以全局使用

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;

2.可以局部使用

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
NOHANDLECOLLISIONS
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;

3.可以針對特定的表

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep, NOHANDLECOLLISIONS;
MAP hr.country, TARGET hr.country, NOHANDLECOLLISIONS;  

5.總結下

1.開啓HANDLECOLLISIONS後,OGG會用預設的邏輯處理兩邊數據不一致的情況;如update變insert、或覆蓋等。
2.在初始化同步階段可以使用,因爲靜態同步的數據和trail中可能衝突。
3.正式環境後,應該關閉,讓錯誤暴露出來,方便運維排查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章