ITPub博客

首页 > Linux操作系统 > Linux操作系统 > GoldenGate Supplemental Log Data

GoldenGate Supplemental Log Data

原创 Linux操作系统 作者:abstractcyj 时间:2013-07-19 09:45:50 0 删除 编辑
GoldenGate同步Oracle数据到SQL Server, 一个问题让我对supplemental log的认识多了一层
 源端Oracle表结构:
  desc scott.myemps
      名称         空值       类型            
        ---------- -------- ------------- 
        ID         NOT NULL NUMBER        
    FIRST_NAME          VARCHAR2(100) 
    LAST_NAME           VARCHAR2(100) 
     SALARY                  NUMBER      

  目标端SQL Server表结构:
     CREATE TABLE [dbo].[myemps](

        [id] [numeric](18, 0) NOT NULL,

        [full_name] [varchar](300) NULL,

       [wages] [numeric](18, 4) NULL,

        [first_name] [varchar](200) NULL,

         [last_name] [varchar](200) NULL,

          PRIMARY KEY CLUSTERED

           (

        [id] ASC

      )


    源端extract配置:

       GGSCI (chenyj-WorkPC) 7> view param oraext1

              extract oraext1

              userid ggs, password ggs

              GETTRUNCATES

              exttrail D:\ggora-ms\ggsora\dirdat\oa

              table scott.customer;

              table scott.myemps;


        GGSCI (chenyj-WorkPC) 8> view param pumpdb

             EXTRACT pumpdb

             USERID ggs, PASSWORD ggs

             GETTRUNCATES

             RMTHOST 127.0.0.1, MGRPORT 7700

             RMTTRAIL D:\ggora-ms\ggsms\dirdat\or

             table scott.customer;

             table scott.myemps;


   目标端replicat配置:

     GGSCI (chenyj-WorkPC) 9> view param msrep1

           REPLICAT MSREP1

           targetdb ggs_nc

           GETTRUNCATES

           APPLYNOOPUPDATES

           SOURCEDEFS dirdef/source.def

           MAP scott.customer, TARGET dbo.customer;

           map scott.myemps, target dbo.myemps,

           COLMAP (USEDEFAULTS,

           WAGES = @COMPUTE(SALARY * 12)

            FULL_NAME = @STRCAT(LAST_NAME,",",FIRST_NAME));


源端插入数据然后更新:


insert into myemps(id,first_name,last_name,salary) values(2, 'A', 'B', 100000);

commit;

update myemps set first_name = 'CCCC' where id = 2;

commit;


同步之后, SQLServer里看到的full_name应该是B,CCCC,而不应该是B,A。

在OTN发帖:https://forums.oracle.com/thread/2561302


得到的提示是因为supplemental log的设置问题,更新last_name时,如果要使目标端的full_name的结果正确,应该同时将first_name与last_name写入redo log.


通过在oracle里执行:

SQL> alter table scott.myemps add supplemental log data(all) columns;


表已更改。


再做相同的测试,发现full_name结果正确了。


There are several types of supplemental logging:

  • Minimal
  • Primary Key
  • Unique Key
  • Foreign Key
  • All
  • Procedural Replication
参考:

在GGSCI中使用:
GGSCI (chenyj-WorkPC) 14> add trandata scott.myemps cols( first_name,last_name,salary)

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

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    602
  • 访问量
    1091603