2015-09-30 71 views
1

要求:如何跳過Goldengate中複製(目標系統)的事務oracle

源表包含5列。我們正在複製5個目標中的3列。 SEQ_ID是目標上的附加列。

當對不在目標表中的列執行更新操作時,SEQ_ID增加。 只有在目標上存在的列上執行更新時,SEQ_ID纔會增加。

上選定列(ID,年齡,COL1)要複製啓用無條件補充表級記錄:

來源: 表名:測試1(ID,年齡,COL1,COL2,COL3)

目標: 表名:Test1(ID,AGE,COL1,SEQ_ID)

我們創建了一個序列以在插入或更新發生時遞增SEQ_ID。

場景: 如果插入或更新發生在這些列上的源表(ID,年齡,COL1)SEQ_ID被incresed, 並且如果更新發生在其他列(COL2,COL3)SEQ_ID也越來越增加。

我們的要求是當更新發生在其他列(COL2,COL3)上時,SEQ_ID不應該增加。 我想跳過在列(COL2,COL3)上發生的更新事務。

來源: 初級提取物test_e1 EXTRACT TEST_e1 USERID DBTUAT_GG,PASSWORD dbt_1234 EXTTRAIL/DB_TRACK_GG/GGS/dirdat/DD GETUPDATEBEFORES --IGNOREUPDATES --IGNOREDELETES NOCOMPRESSUPDATES TABLE HARI.TEST1,COLS(ID ,AGE,COL1),FILTER(ON UPDATE,IGNORE UPDATE,@STREQ(USAGEAGE,AGE)= 0);

數據泵test_p1: EXTRACT TEST_P1 USERID DBTUAT_GG,PASSWORD dbt_1234 RMTHOST 10.24.187.235,MGRPORT 7809,
RMTTRAIL/Trail_files/TT --PASSTHRU TABLE DBTUAT_GG.TEST1;

目標: 目標Repicat文件: 編輯PARAM test_r

REPLICAT TEST_R USERID GGPROD,PASSWORD GGPROD_123 SOURCEDEFS ./dirsql/def32.sql HANDLECOLLISIONS IGNOREDELETES INSERTMISSINGUPDATES MAP HARI.TEST1,TARGET哈日TEST1,& SQLEXEC(ID test_num,QUERY「select double GGPROD.test_seq.NEXTVAL test_val」,NOPARAMS),& COLMAP(USEDEFAULTS,SEQ_ID = test_num.test_val);

請提出任何可能的解決方案。

回答

0

首先注意:您不需要泵PRM中的USERID和PASSWORD。泵進程不連接到任何數據庫。

其實你已經達到了你的目標。您只在AGE修改時複製數據。 Extract PRM文件中有一個FILTER子句。 ID列不應該改變,因爲這是PK。唯一的問題是,如果刪除被複制,你正在增加SEQ_ID。

類似的東西應該工作:

ALLOWDUPTARGETMAP 

IGNOREDELETES 
-- just inserts and updates that change COL1 
MAP HARI.TEST1, TARGET HARI.TEST1, & 
    SQLEXEC (ID test_num,QUERY "select GGPROD.test_seq.NEXTVAL test_val from dual", NOPARAMS), & 
    COLMAP(USEDEFAULTS, SEQ_ID = test_num.test_val); 

-- just replicate the delete operations 
GETDELETES 
IGNOREINSERTS 
IGNOREUPDATES 
MAP HARI.TEST1, TARGET HARI.TEST1; 
GETINSERTS 
GETUPDATES