Goldegate 追數問題

gdutllf2006發表於2010-10-15

#########################################################################
問題的產生:


問題:由於源端執行了ddl操作而目標端沒有執行而造成資料衝突無法進行復制。所以現在要跳過報資料衝突的表,不讓這些表進行復制。等到其他表的資料全部都複製
完成了以後,在透過exp和imp的方法單獨同步這幾張表


#########################################################################
大概流程

0
停止,兩邊的應用

1
(廣州-北京)
廣州 exp程式增加tableexclude ORIUSR.T_ORI_ARCHINFO
     dpe程式增加tableexclude ORIUSR.T_ORI_ARCHINFO
  

北京
rep程式增加mapexclude ORIUSR.T_ORI_ARCHINFO;

(新增引數後,要重啟ext和dpe程式)
注意:新增的引數要加到最上邊
如:
mapexclude ORIUSR.T_ORI_CERT_MONITOR;
map ORISTAT.* , target ORISTAT.*;
map ORIUSR.* , target ORIUSR.*;
map UNICHARGE.* , target UNICHARGE.*;
map UNICHGSTATE.* , target UNICHGSTATE.*;
map goldengate.test2 , target goldengate.test2;
map ORIQUERY.* , target ORIQUERY.*;
map OCRUSR.* , target OCRUSR.*;
~
廣州 extcdz2.prm
tableexclude ORIUSR.T_ORI_CERT_MONITOR;
table ORISTAT.*;
table ORIUSR.*;
table UNICHARGE.*;
table UNICHGSTATE.*;
table goldengate.test2;
table ORIQUERY.*;
table OCRUSR.*;

廣州 dpecdz2.prm
tableexclude ORIUSR.T_ORI_CERT_MONITOR;
table ORISTAT.*;
table ORIUSR.*;
table UNICHARGE.*;
table UNICHGSTATE.*;
table ORIQUERY.*;
table goldengate.test2;
table OCRUSR.*;

1.1
停止廣州ext和dpe程式後再啟動ext和dpe程式,使修改的引數生效(確保沒有交易以後才能停掉這些程式)

2
(廣州
dblogin userid goldengate, password goldengate
delete trandata ORIUSR.T_ORI_CERT_MONITOR
add trandata ORIUSR.T_ORI_CERT_MONITOR

廣州-
觀察exp和dpe程式的rba號是否還繼續增長,如果沒有增長了並與北京rba一致。停止ext和dpe程式

3
(廣州
廣州將ORIUSR.T_ORI_CERT_MONITOR表匯出

廣州去除剛剛新增的引數後,廣州啟動ext和dpe程式

將匯出的dmp檔案傳輸給北京


北京匯入dmp檔案後,檢查附件日誌是否有問題
select table_name from all_tables where owner in ('ORIUSR') and table_name not in (select distinct table_name
from dba_log_group_columns
where owner in ('ORIUSR'));

4
北京)
去除剛剛新增的引數後,啟動rep程式
如果有問題可以在rep中新增map ORIUSR.T_ORI_CERT_MONITOR , target ORIUSR.T_ORI_CERT_MONITOR,handlecollisions;跳過這個表錯誤,應用可以應用的部分


等應用完佇列日誌後,快速關閉rep程式。

從引數裡去除map ORIUSR.T_ORI_CERT_MONITOR , target ORIUSR.T_ORI_CERT_MONITOR,handlecollisions;

再啟動rep程式

7
啟動應用


#########################################################################

操作過程:


1 先停止資料庫監聽,保證沒有新連線進來
lsnrctl stop

注意,因為是RAC環境,此操作要在兩臺主機上都做.


2  由於應用的問題,資料庫中還存在很多掛起的連線,手動Kill

select username, 'alter system kill session '||chr(39)||SID||','||SERIAL#||chr(39)||';'
from v$session where  username in ('ORIUSR', 'ORISTAT', 'UNICHARGE','UNICHGSTATE','ORIQUERY','OCRUSR') order by username;


select  'alter system kill session '||chr(39)||SID||','||SERIAL#||chr(39)||';'
from v$session where status='ACTIVE' and username in ('ORIUSR', 'ORISTAT', 'UNICHARGE','UNICHGSTATE','ORIQUERY','OCRUSR') order by username;


注意:
1) 新增使用者條件來確保,不會影響資料庫的正常執行.
2) 因為是RAC環境,此操作要在兩臺主機上都做.

3 再加引數:

exp程式增加tableexclude ORIUSR.T_ORI_CERT_MONITOR
dpe程式增加tableexclude ORIUSR.T_ORI_CERT_MONITOR
    

4 停止GG程式

info extcdz2,detail
 
info extcdz2,showch
 
 確定沒事務
 
停止extcdz2,dpecdz2
 

再啟動,使新的引數檔案生效.
 
 
dblogin userid goldengate, password ggs10_cdzhp
delete trandata oriusr.T_ORI_CERT_MONITOR
add trandata oriusr.T_ORI_CERT_MONITOR
 
廣州--
觀察exp和dpe程式的rba號是否還繼續增長,如果沒有增長了。停止ext和dpe程式

5
廣州--
將ORIUSR.T_ORI_CERT_MONITOR表匯出

exp oriusr/c_29g0uu tables=T_ORI_CERT_MONITOR  file=/home/oracle/T_ORI_CERT_MONITOR.dmp  file=/home/oracle/T_ORI_CERT_MONITOR.log


6
廣州去除剛剛新增的引數後,廣州啟動ext和dpe程式

將匯出的dmp檔案傳輸給北京

7 北京)
匯入dmp檔案
去除剛剛新增的引數後,啟動rep程式


8 兩邊檢查資料複製情況,保證同步
select * from ORIUSR.T_ORI_CERT_MONITOR
MINUS
select * from ;


select * from
MINUS
select * from ORIUSR.T_ORI_CERT_MONITOR;


9 啟動監聽,恢復應用的連線.
 

10 完成資料的同步,恢復.


問題: 即使關掉了所有的應用連線,只是保證應用資料沒有變化,但並不是保證沒有redo log再產生. 這是完全不關事的.

 


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-675987/,如需轉載,請註明出處,否則將追究法律責任。

相關文章