OGG 使用defgen 同步不同定義表實驗

huzhichengforce發表於2014-07-14
實驗環境 linux red hat   OTO 11g
在源端建立表:
CREATE TABLE DEFG1
(
  OB1  NUMBER,
  OB2  VARCHAR2(5 BYTE),
  OB3  DATE,
  OB4  CHAR(1 BYTE),
  SUPPLEMENTAL LOG GROUP GGS_77320 (OB1) ALWAYS
);
CREATE UNIQUE INDEX GG.PK_OB1_DEF ON GG.DEFG1
(OB1);
在目標端建立表:
CREATE TABLE DEFG2
(
  MB1  NUMBER,
  MB2  VARCHAR2(5 BYTE),
  MB3  DATE,
  MB4  CHAR(1 BYTE),
  SUPPLEMENTAL LOG GROUP GGS_77327 (MB1) ALWAYS
);
CREATE UNIQUE INDEX REGG.PK_MB1_DEF ON REGG.DEFG2
(MB1);
二、給表新增附加日誌
GGSCI> add trandata  defg1---源端
GGSCI> add trandata  defg2---目標端
三、停止抽取和推送程式在extract和pump 程式引數檔案中加入表----因為我是用原來存在的抽取程式和推送程式 所以只需要在各自的引數檔案中加入表就可以。
stop er *  --源端
GGSCI (OGG1) 58> view params ggex
EXTRACT ggex
GETTRUNCATES
REPORT AT 0:00
WARNLONGTRANS 60M,checkinterval 30M
SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8)
DDL INCLUDE ALL
USERID gg,PASSWORD  AACAAAAAAAAAAACANJPHHDSJCIYCFCZB,ENCRYPTKEY default
ENCRYPTTRAIL AES192 KEYNAME mykey1
EXTTRAIL /u01/ogg/dirdat/kt
TABLE gg.sen?;
TABLE GG.tgt;
TABLE GG.tab;
TABLE GG.tabx;
TABLE GG.MB_JSBJZS;
TABLE GG.ehr_healthrecord;
TABLE GG.colmap;
table gg.col;
table ggdl.tes;
table gg.defg1;

GGSCI (OGG1) 59> view params ggpump
EXTRACT ggpump
USERID gg, PASSWORD gg
RMTHOST og2, MGRPORT 7809 ,compress
GETTRUNCATES
REPORT AT 0:00
DDL INCLUDE ALL
SETENV (NLS_LANG =  AMERICAN_AMERICA.AL32UTF8)
warnlongtrans 60m,checkinterval 30m
DISCARDFILE /u01/ogg/dirrpt/pmp.dsc, PURGE
DECRYPTTRAIL AES192 KEYNAME mykey1
ENCRYPTTRAIL AES192 KEYNAME mykey2
RMTTRAIL /u01/ogg/dirdat/kt MEGABYTES 2, PURGE
TABLE gg.sen?;
TABLE GG.tgt;
table gg.tab;
table gg.tabx;
TABLE GG.MB_JSBJZS;
table gg.ehr_healthrecord;
table gg.colmap;
table gg.col,cols(id1,id2,id4);
table ggdl.tes;
table gg.defg1;
四、在源端生成定義
GGSCI>edit params defgen
defsfile /u01/ogg/defge.p----defge.p 為生成的定義檔名稱
userid gg,password gg-
table gg.defg1; 
[oracle@OGG1 ogg]$ defgen paramfile /u01/ogg/dirprm/defgen.prm
把defge.p複製到目標端目錄最好放在 /u01/ogg/dirdef  規範嘛...
------------以下為目標端 複製程式操作-----------------
一、新增程式
停止原來的複製程式
GGSCI>stop er *
程式引數檔案:
GGSCI (og2) 31> view params redf
---------this file writed by huzhicheng in 2014/05/21 if you have any question please conntact me with huzhicheng.force@gmail.com--------
replicat redf
HANDLECOLLISIONS
GETTRUNCATES
GROUPTRANSOPS 100
REPORT AT 0:00
ALLOWNOOPUPDATES
WARNRATE 1000
ddlerror default ignore retryop maxretries 3 retrydelay 5
USERID regg , PASSWORD regg
DISCARDFILE ./dirrpt/RINIaa.dsc, PURGE
DECRYPTTRAIL AES192 KEYNAME mykey2
SOURCEDEFS /u01/ogg/dirdef/defg.p
map gg.DEFG1 , target regg.DEFG2 COLMAP(mb1=ob1,mb2=ob2,mb3=ob3,mb4=ob4);
這裡colmap 需要注意如mb2 和ob2 為時間型別, 且ob4 mb4 為char(1) 如果打亂順序 會是的 程式 起不來,出錯,這事很明顯的其它型別的怎麼能插入date的呢??  所以你在複製的時候需要根據業務來調整你的複製物件,不能一味操作。
 儲存你的引數檔案
二、新增複製程式
ADD REPLICAT redf, EXTTRAIL /u01/ogg/dirdat/kt checkpointtable regg.chkpoint 
三、獲取最後的RBA 和seq
為什麼呢? 因為 我們是新增複製程式而且用的是原來的資料檔案 如果不更改獲取的rba seq 位置不告訴複製程式從那裡開始去 複製程式 會從kt00000000 這個檔案開始讀,而且你以前很可能配置了purge 引數 kt00000000早已經被清除 。你在源端更改資料 而複製程式讀的是kt00000000 這個檔案 你後來傳送過來的檔案kt00000000xx 複製程式不會去讀取,就算你做了更新對於複製程式來說是無效的,經實驗驗證。所以需要獲取rba和seq 從最後一個檔案讀取。

GGSCI>info replgg,showch---replgg 是原來的replicat程式
Current Checkpoint Detail:
Read Checkpoint #1
  GGS Log Trail
  Startup Checkpoint (starting position in the data source):
    Sequence #: 54
    RBA: 6062
    Timestamp: 2014-07-14 23:24:27.880615
    Extract Trail: /u01/ogg/dirdat/kt
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 54
    RBA: 8163
    Timestamp: 2014-07-15 00:30:48.944588
    Extract Trail: /u01/ogg/dirdat/kt
CSN state information:
  CRC: D4-F8-AB-DE
  Latest CSN: 3243078
  Latest TXN: 5.22.1964
  Latest CSN of finished TXNs: 3243078
  Completed TXNs: 5.22.1964
Header:
  Version = 2
  Record Source = A
  Type = 1
  # Input Checkpoints = 1
  # Output Checkpoints = 0
紅色部分為我們需要的
四、切換RBA讀取
ggsci>alter redf   extseqno 54, extrba 8163

五、開啟程式
start er * ----源端和目標端同樣執行
六、驗證結果
在源端插入資料 在目標端執行查詢看是否發生更改
------------------------------ok---------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26764973/viewspace-1218605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章