1

要求:

源表包含 5 列。我们在目标上复制 5 列中的 3 列。SEQ_ID 是目标上的附加列。

对不在目标表中的列执行更新操作时,增加 SEQ_ID。仅当对目标上存在的列执行更新时,SEQ_ID 才应增加。

在要复制的选定列(ID、AGE、COL1)上启用无条件补充表级别日志记录:

来源:表名:Test1(ID,AGE,COL1,COL2,COL3)

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

我们创建了一个序列来在插入或更新发生时增加 SEQ_ID。

场景:如果在这些列(ID,AGE,COL1)上的源表上发生插入或更新,则增加 SEQ_ID,并且如果在其他列(COL2,COL3)上发生更新,则 SEQ_ID 也会增加。

我们的要求是当其他列(COL2,COL3)发生更新时,SEQ_ID 不应该增加。我想跳过 column(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(之前.AGE, 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;

目标:目标 Repcat 文件:编辑参数 test_r

REPLICAT TEST_R USERID GGPROD,PASSWORD GGPROD_123 SOURCEDEFS ./dirsql/def32.sql HANDLECOLLISIONS IGNOREDELETES INSERTMISSINGUPDATES 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);

请提出任何可能的解决方案。

4

1 回答 1

0

首先注意:您不需要在 Pump PRM 中使用 USERID 和 PASSWORD。Pump 进程不连接到任何数据库。

其实你已经达到了你的目的。您仅在修改 AGE 时复制数据。提取 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
于 2017-07-04T16:16:18.910 回答