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 user,system密碼******
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一直增大,不受影響)
沒有留言:
張貼留言