星期四, 2月 12, 2015

[轉載] GoldenGate 表格的重新初始化十大步驟

Ref:

http://www.2cto.com/database/201109/104845.html

 

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 usersystem密碼******

export ORACLE_SID=***(無單機多實例的無需做)

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導入資料;

確認在目標端

確認ORACLE_SID正確

system用戶,

export ORACLE_SID=***(無單機多實例的無需做)

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);

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

確認在目標端

確認ORACLE_SID正確

 

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一直增大,不受影響)

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...