goldengata的COLMAP要慎用

今天在工作中出现一个问题,配置goldengata做库对库数据同步,采用COLMAP配置项对目标库增加附加字段。当源端增加新字段后,目标表可以同步字段结构,但是新字段内没有数据。很是诡异,下面分项一下测试过程。

测试过程操作如下

 1.     增加checkpoint表

 DBLOGIN[SOURCEDB <dsn>][, USERID <db_user>][, PASSWORD<pw>[<encryption

options]]

 ADDCHECKPOINTTABLE [<owner>.<table>]

 EDIT PARAMS./GLOBALS

CHECKPOINTTABLE<owner>.<table>

 例如:

 dblogin userid ggs,password ggs

add checkpointtableggs.test_ckpt

 EDIT PARAMS ./GLOBALS

CHECKPOINTTABLE ggs.test_ckpt

 注意:修改globals文件,需要重启ggsci

修改replicat配置文件

REPLICAT REP_TS2

ASSUMETARGETDEFS

SETENV (ORACLE_SID="ORCL")

USERID ggs,PASSWORDggs

MAP GGS.TEST_REP_TS1,TARGET GGS.TEST_REP_TS2;

测试同步

1.     源增加记录-【测试成功】。

insert into GGS.TEST_REP_TS1 values (13,'123');

select * from GGS.TEST_REP_TS1;

2.     修改记录-【测试成功】

update ggs.test_rep_ts1 set name = '1' where id = 13;

3.     源端增加字段-【测试成功】

alter table GGS.TEST_REP_TS1 add (ts_1 varchar(12));

insert into GGS.TEST_REP_TS1 values (16, '123','a');

select * from GGS.TEST_REP_TS2;

4.     删除字段-【测试成功】

alter table GGS.TEST_REP_TS1drop column TS_4;

alter table GGS.TEST_REP_TS1drop column TS_3;

alter table GGS.TEST_REP_TS1drop column TS_2;

alter table GGS.TEST_REP_TS1drop column TS_1;

目标端增加映射字段

增加如下配置

MAPGGS.TEST_REP_TS1 TARGET GGS.TEST_REP_TS2, &

COLMAP(USEDEFAULTS,BA_TYPE=@GETENV("GGHEADER","BEFOREAFTERINDICATOR")),&

KEYCOLS(ID);

没有报错,增加一条记录后,进程报错。修改目标表后错误消失。

alter table GGS.TEST_REP_TS2 add (BA_TYPE varchar2(30));

但是目标表中原始数据的BA_TYPE均为空值。新增记录有值

select id,ba_type from ggs.test_rep_ts2;

原表再次增加字段

alter table GGS.TEST_REP_TS1 add (ts_2 varchar(12));

字段可以正常增加过来。

insert into GGS.TEST_REP_TS1 values (18, '123','a','b');

但是新段中的值无法同步过来。更新字段也不能反应在目标端

update ggs.test_rep_ts1 set ts_2 = 'c' where id = 18;

原端新加一条记录,其它字段可以加进来,但是BA_TYPE以后的字段无法增加进来

insert into GGS.TEST_REP_TS1 values (19, '123','a','b');

修改BA_TYPE的位置到最后,再增加一条记录测试,记录可以添加进去,但是ts_2中仍然没有值。

alter table GGS.TEST_REP_TS2drop column BA_TYPE;

alter table GGS.TEST_REP_TS2 add (BA_TYPE varchar2(30));

insert into GGS.TEST_REP_TS1 values (20, '123','a','b');

修改配置文件,将USEDEFAULTS放到后面,启动进程正常

COLMAP(BA_TYPE =@GETENV("GGHEADER","BEFOREAFTERINDICATOR"),USEDEFAULTS)

增加一条记录,新增字段可以正常增加到目标端,并且其它字段也正常。

insert into GGS.TEST_REP_TS1 values (21, '123','a','b');

select * from ggs.test_rep_ts2 where id = 21;

再增加一个字段测试,字段可以正常同步

alter table GGS.TEST_REP_TS1 add (ts_3 varchar(12));

增加一条记录,还是不能同步新字段ts_3

insert into GGS.TEST_REP_TS1 values (22, '123','a','b', 'c');

select * from ggs.test_rep_ts2 where id = 22;

重新抽取进程,也不管用。

insert into GGS.TEST_REP_TS1 values (23, '123','a','b', 'c');

select * from ggs.test_rep_ts2 where id = 27; 

但是如果编辑rep进程。重新生成。则数据正常。增加DYNAMICRESOLUTION

测试一下。

insert into GGS.TEST_REP_TS1 values (28, '123','a','b', 'c');

再增加一个字段测试,字段可以正常同步

alter table GGS.TEST_REP_TS1 add (ts_4 varchar(12));

insert into GGS.TEST_REP_TS1 values (33, '123','a','b', 'c','d');

alter table GGS.TEST_REP_TS1 add (ts_5 varchar(12));

insert into GGS.TEST_REP_TS1 values (37, '123','a','b', 'c','d', 'e');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值