首页 > 数据库 > Oracle > OGG源端同目标端某个字段数值相差10000倍
goldengate源端同目标端检修完成后,进行数据同步,检查相关数据,发现源端同目标端某几个字段的值相差10000倍,如下:
源端:
SYS@source >select a.rec_id,a.last_read,a.this_read,a.estimate_pq,a.mr_pq from USERA.TABLE_A a;
REC_ID LAST_READ THIS_READ ESTIMATE_PQ MR_PQ
------------------------ ---------- ---------- ----------- ----------
1 .111 .111 .111 .111
目标端
SYS@target>select a.rec_id,a.last_read,a.this_read,a.estimate_pq,a.mr_pq from USERB.TABLE_A a;
REC_ID LAST_READ THIS_READ ESTIMATE_PQ MR_PQ
------------------------ ---------- ---------- ----------- ----------
1 .111 .111 1110 1110
2021/04/01 17:05:58.000.254 Insert Len 278 RBA 484408
Name: USERA.TABLE_A
After Image: Partition 4 G e
0000 0005 0000 0001 3100 0100 0500 0000 0131 0002 | ........1........1..
000a 0000 0000 0000 0000 0001 0003 0005 0000 0001 | ....................
3100 0400 0500 0000 0131 0005 0005 0000 0001 3100 | 1........1........1.
0600 0500 0000 0131 0007 0005 0000 0001 3100 0800 | .......1........1...
0500 0000 0131 0009 000c 0000 0008 3230 3231 3033 | .....1........202103
3330 000a 000a 0000 0000 0000 0000 0001 000b 0005 | 30..................
0000 0001 3100 0c00 0500 0000 0131 000d 000a 0000 | ....1........1......
Column 0 (x0000), Len 5 (x0005)
0000 0001 31 | ....1
Column 1 (x0001), Len 5 (x0005)
0000 0001 31 | ....1
Column 2 (x0002), Len 10 (x000a)
0000 0000 0000 0000 0001 | ..........
Column 3 (x0003), Len 5 (x0005)
0000 0001 31 | ....1
Column 4 (x0004), Len 5 (x0005)
0000 0001 31 | ....1
Column 5 (x0005), Len 5 (x0005)
0000 0001 31 | ....1
Column 6 (x0006), Len 5 (x0005)
0000 0001 31 | ....1
Column 7 (x0007), Len 5 (x0005)
0000 0001 31 | ....1
Column 8 (x0008), Len 5 (x0005)
0000 0001 31 | ....1
Column 9 (x0009), Len 12 (x000c)
0000 0008 3230 3231 3033 3330 | ....20210330
Column 10 (x000a), Len 10 (x000a)
0000 0000 0000 0000 0001 | ..........
Column 11 (x000b), Len 5 (x0005)
0000 0001 31 | ....1
Column 12 (x000c), Len 5 (x0005)
0000 0001 31 | ....1
Column 13 (x000d), Len 10 (x000a)
0000 0000 0000 0000 0001 | ..........
Column 14 (x000e), Len 10 (x000a)
0000 0000 0000 0000 0001 | ..........
Column 15 (x000f), Len 10 (x000a)
0000 0000 0000 0000 0001 | ..........
Column 16 (x0010), Len 5 (x0005)
0000 0001 31 | ....1
Column 17 (x0011), Len 5 (x0005)
0000 0001 31 | ....1
Column 18 (x0012), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是正常的
Column 19 (x0013), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是正常的
Column 20 (x0014), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是异常的,即扩大了10000倍
Column 21 (x0015), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是异常的,即扩大了10000倍
Column 22 (x0016), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是异常的,即扩大了10000倍
Column 23 (x0017), Len 10 (x000a)
0000 0000 0000 0000 0456 | .........V -- 十六进制的456 转换为 十进制的 1110 为什么此列的数据就是异常的,即扩大了10000倍
GGS tokens:
5200 0014 4141 542f 5471 4144 5441 414a 7434 3941 | R...AAT/TqADTAAJt49A
4142 0001 | AB..
对比以上数据,为什么LAST_READ 和 THIS_READ 列的数据正常,但ESTIMATE_PQ 以后的列数据就扩大了10000倍?

GGSCI (target) 26> view params REPCXX
REPLICAT repcjxx
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) ---the same as source db
USERID goldengate, PASSWORD AAdddAS, ENCRYPTKEY default
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
SOURCEDEFS ./dirdef/cj/xxx.def
DISCARDROLLOVER AT 02:30
GETUPDATEBEFORES
MAP USERA.TABLE_A,TARGET USERB.TABLE_A,colmap (usedefaults,target_write_time = @datenow(), source_change_time = @GETENV ("GGHEADER", "COMMITTIMESTAMP"));
./defgen paramfile ./dirdef/extjc_xsc.prm
源端:
SYS@source >select a.rec_id,a.last_read,a.this_read,a.estimate_pq,a.mr_pq from USERA.TABLE_A a;
REC_ID LAST_READ THIS_READ ESTIMATE_PQ MR_PQ
------------------------ ---------- ---------- ----------- ----------
3 .555 .555 .555 .555
目标端
SYS@target>select a.rec_id,a.last_read,a.this_read,a.estimate_pq,a.mr_pq from USERB.TABLE_A a;
REC_ID LAST_READ THIS_READ ESTIMATE_PQ MR_PQ
------------------------ ---------- ---------- ----------- ----------
3 .555 .555 .555 .555
1 根据如上信息,源端同目标端相关表的字段类型一致,如果配置了sourcedefs参数,则OGG会严格按照defgen生成的表的定义文件进行数据录入,如果未及时更新defgen文件,有可能会造成源端同目标端的数据不一致。
2 业务系统检修,未协调相关OGG人员,相关工作没有配合到位,导致源端同目标端数据出现差异。
3 现实场景,在多个工作环境中,发现都是源端修改相关表结构后,目标端出现故障或报错后,才会解决相关问题。那么问题来了,如果源端同目标端是异构,且源端更改表结构后,目标端未及时更新目标端的defgen文件,且目标端的OGG状态正常,但有可能已经造成了数据的不一致。根据如上,为了保证源端及目标端数据的一致性,急需检修管理的规范性,要不然,即使数据发生差异,也无法及时发现问题。等真正用时,已经晚了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69996316/viewspace-2766436/ ,如需转载,请注明出处,否则将追究法律责任。