GoldenGate Supplemental Log Data

abstractcyj發表於2013-07-19
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部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-766663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章