天天看點

goldengate個别表的重新初始化十大步驟

表的重新再同步(無需生産端時間視窗)

如果是某些表由于各種原因造成兩邊資料不一緻,需要重新進行同步,但實際業務始終24小時可用,不能提供時間視窗,則可以參照以下步驟。(因較為複雜,使用需謹慎!)

列出需要重新初始化的表和當時exclude的原因(檢查下面兩個地方):

生産端抽取程序exclude表                   

容災端複制程序中exclude表

1) 确認ext/dpe/rep程序均無較大延遲,否則等待追平再執行操作;

2) 停止目标端的rep程序;(如時間要求嚴格,可放到後面)

注意:步驟3-6為将源端資料通過exp/imp導入到目标端,客戶也可以選擇其它初始化方式,比如expdp/impdp。

3) 在源端獲得目前的scn号。例如:

export ORACLE_SID=***(無單機多執行個體的無需做)

select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

          10144674732950

以下以獲得的scn号為10144674732950為例

4) 在源端使用exp導出所需重新初始化的表或者幾張表資料,并且指定到剛才記下的scn号。          

exp導出

确認在源端

确認ORACLE_SID正确

需要sysem使用者,可以不用grant execute flashback to user,system密碼******

exp system/****** tables=SCOTT.T9 file=/home/oracle/scott_t9_1.dmp grants=n statistics=none triggers=n compress=n FLASHBACK_SCN=10144674732950 log=/home/oracle/scott_t9_1.log;

5) 通過sftp傳輸到目标端;

6) 在目标端,使用imp導入資料;

确認在目标端

用system使用者,

truncate table scott.t9    删除記錄

[oracle@localhost ~]$ imp system/oracle file=/home/oracle/scott_t9_1.dmp fromuser=scott touser=scott ignore=y log=/home/oracle/scott_t9_imp_1.log ;

特别注意:上面imp語句中沒有使用commit=y的參數,如果對大表進行imp操作應該使用commit=y參數(資料分批量送出),原因:如果導入執行很長時間,imp操作被中斷(好在是容災端導入,不會有對業務系統産生很大壓力),這個中斷将導緻這個大事物的復原;復原會占用更多時間(影響啟動複制程序的時間);或者直接采用資料泵的方式導出導入(資料泵預設不需要commit參數);

7) 如果這些表有外鍵,在目标端檢查這些外鍵并禁止它們(記得維護dirsql下的禁止和啟用外鍵的腳本SQL);

确認有無外鍵,執行腳本禁用外鍵

8) 編輯目标端對應的rep參數檔案,在其map裡面加入一個過濾條件,隻對這些重新初始化的表應用指定scn号之後的記錄(一定要注意不要修改本次初始化之外的其它表,會造成資料丢失!):

map source.mytab, target target.mytab, filter ( @GETENV ("TRANSACTION", "CSN") >     10144674732950 ) ;

9) 确認參數無誤後,啟動目标端的rep程序;

10) 使用info repxx或者lag repxx直到該程序追上,停止該程序去掉filter即可進入正常複制。(去掉filter時間待定,因SCN一直增大,不受影響)

本文轉自 liu99fifa 51CTO部落格,原文連結:http://blog.51cto.com/andrewliu/668289,如需轉載請自行聯系原作者