表的重新再同步(無需時間窗口)
表的重新再同步(無需時間窗口)
如果是某些表由於各種原因造成兩邊數據不一致,需要重新進行同步,但實際業務始終24小時可用,不能提供時間窗口,
則可以參照以下步驟。(因較為復雜,使用需謹慎!)
1)確認ext/dpe/rep進程均無較大延遲,否則等待追平再執行操作;
2)停止目標端的rep進程;
註意:步驟3-5為將源端數據通過exp/imp導入到目標端,客戶也可以選擇其它初始化方式,比如expdp/impdp。
3)在源端獲得當前的scn號。例如:
select to_char(current_scn) from v$database;
以下以獲得的scn號為1176681為例
4)在源端使用exp導出所需重新初始化的表或者幾張表數據,並且指定到剛才記下的scn號。例如:
exp <username>/<password> tables=ctais2.SB_ZSXX grants=n statistics=none triggers=n compress=n FLASHBACK_SCN=1176681
5)通過ftp傳輸到目標端;
6)在目標端,使用imp導入數據;
導入數據之前,先把目標端對應的表刪除
nohup imp goldengate/XXXXX file=nanhai.dmp fromuser=ctais2 touser=ctais2 ignore=y &
7)如果這些表有外鍵,在目標端檢查這些外鍵並禁止它們(記得維護dirsql下的禁止和啟用外鍵的腳本SQL);
8)編輯目標端對應的rep參數文件,在其map裏面加入一個過濾條件,只對這些重新初始化的表應用指定scn號之後的記錄
(一定要註意不要修改本次初始化之外的其它表,會造成數據丟失!):
map source.mytab, target target.mytab, filter ( @GETENV ("TRANSACTION", "CSN") > 1176681 ) ;
9)確認參數無誤後,啟動目標端的rep進程;
10)使用info repxx或者lag repxx直到該進程追上,停止該進程去掉filter即可進入正常復制。
表的重新再同步(無需時間窗口)