ITPub博客

首页 > 数据库 > Oracle > GoldenGate更新丢失问题

GoldenGate更新丢失问题

Oracle 作者:hooca 时间:2016-05-06 16:07:09 0 删除 编辑
最近,在GoldenGate(11.2.1.0.1 for 10g)的目标库上发现一个很有趣但又很扰人的问题。事情是这样的,有用户反映说在目标库上的一张表上有两个字段(DZFAILFLAG,REMARK)的值与源库的不一致。
检查了一下源库与目标库的GoldenGate进程,两边都运行的很好,也没有报任何错误。查看了一下源库和目标库上那张表的记录数,两边的记录数是一样的,但确实有些记录的值是不一致的!而且当源库的记录数增加时,目标库的记录数也跟着相应增加:


点击(此处)折叠或打开

  1. 源库:
  2. 11:17:37 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  3.  
  4.   COUNT(*)
  5. ----------
  6.     980489
  7.  
  8. 11:18:07 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  9.  
  10.   COUNT(*)
  11. ----------
  12. 980490
  13.  
  14. 11:18:43 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  15.  
  16.   COUNT(*)
  17. ----------
  18. 980493
  19.  
  20. 11:19:44 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  21.  
  22.   COUNT(*)
  23. ----------
  24.     980498


  25. 目标库:
  26. 11:17:43 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  27.  
  28.   COUNT(*)
  29. ----------
  30. 980490
  31.  
  32. 11:18:53 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  33.  
  34.   COUNT(*)
  35. ----------
  36. 980493
  37.  
  38. 11:19:38 SQL> SELECT COUNT(*) FROM LISDATA.LDCONTINVOICEMAP;
  39.  
  40.   COUNT(*)
  41. ----------
  42.     980498

也就是说复制进程是在工作的,而且工作的很正常!尝试对源库上的某条记录的DZFAILFLAG,REMARK进行更新,结果很让人失望,在目标库的这两个字段的值死活都不更新!考虑到这张表的记录还不算多,于是就对这张表重新进行了初始化。经过一番折腾,表终于重新初始化完成了,满怀着希望重新尝试对源库上的字段进行更新,结果让人抓狂,还是不更新!没办法,只能去分析一下trail文件,看看到底发生了什么事,用logdump打开相应的trail文件,定位到相应的位置:

点击(此处)折叠或打开

  1. 2013/08/20 12:50:55.000.000 FieldComp Len 48 RBA 17500895
  2. Name: LISDATA.LDCONTINVOICEMAP
  3. After Image: Partition 4 G s
  4. 0000 0010 0000 000c 3330 3030 3030 3030 3130 3335 | ........300000001035
  5. 0001 0005 0000 0001 3100 0200 0f00 0000 0b38 3330 | ........1........830
  6. 3130 3030 3030 3032 | 10000002
  7. Column 0 (x0000), Len 16 (x0010)
  8. Column 1 (x0001), Len 5 (x0005)
  9. Column 2 (x0002), Len 15 (x000f)
从trail的记录里可以看到,EXTRACT只抓取到了主键列(列0,1,2是这张表的主键),而要更新的那两列没有抓取到!试着重启了一下EXTRACT进程,结果更新就一切正常了!
了解到字段DZFAILFLAG,REMARK是前两天刚刚新增加的,而更新丢失恰恰就发生在这两个新增字段上。也就是说当对表增加新字段,如果不重启EXTRACT进程,就无法抓取到新的字段信息!这样的话,那如果使用GoldenGate的DDL复制功能,即使DDL复制工作正常,是不是应该也会碰到这样的问题?那GoldenGate的DDL的复制功能岂不成了摆设?已经开了SR给ORACLE,不知道是不是GoldenGate的BUG。在这之前,各位在做DDL前,还是先把EXTRACT先停掉。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-2094943/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-29

  • 博文量
    215
  • 访问量
    403361