GoldenGate使用Obey指令碼同步資料

zhenghaishu發表於2015-08-13

GoldenGate使用Obey指令碼同步資料

一、需求

Windows伺服器:

IP: 10.0.30.135

sys使用者建表

SQL> create table scott.test_table1

(

id varchar2(10) primary key,

name varchar2(20)

);

 

Linux伺服器:

IP: 192.168.6.135

sys使用者建表

SQL> create table haishu.test_table1

(

id varchar2(10) primary key,

username varchar2(20)

);

 

要求實現Windows下的scott.test_table1Linux下的haishu.test_table2之間的資料同步。注意這裡使用者不同,表名不同,欄位名一個相同另一個不相同。

 

二、配置檔案和引數檔案

1 Windows伺服器

檔名

存放路徑

GLOBAL.txt

F:\app\Administrator\ogg

addcmds.txt

F:\app\Administrator\ogg\dirprm

defgen.prm

F:\app\Administrator\ogg\dirprm

initext.prm

F:\app\Administrator\ogg\dirprm

mgr.prm

F:\app\Administrator\ogg\dirprm

ext_o_01.prm

F:\app\Administrator\ogg\dirprm

pum_o_01.prm

F:\app\Administrator\ogg\dirprm

rep_n_01.prm

F:\app\Administrator\ogg\dirprm

注:ext_o_01pum_o_01中的o代表old,表示本機Windows中的資料庫是老庫。rep_n_01中的n代表複製新庫的資料到本機。

 

 

GLOBAL.txt

GGSCHEMA ogg

CHECKPOINTTABLE ogg.checkpoint

 

addcmds.txt

--login

DBLOGIN USERID ogg, PASSWORD oracle

--create a CHECKPOINTTABLE

ADD CHECKPOINTTABLE ogg.checkpoint

--ADD TRANDATA scott.test_table1

--create a Extract group

ADD EXTRACT ext_o_01, TRANLOG, BEGIN NOW

ADD EXTTRAIL F:\app\Administrator\ogg\dirdat\o1, EXTRACT ext_o_01

--create a data pump group

ADD EXTRACT pum_o_01, EXTTRAILSOURCE F:\app\Administrator\ogg\dirdat\o1, BEGIN now

ADD RMTTRAIL ./dirdat/o1, EXTRACT pum_o_01

--create a Replicat group

ADD REPLICAT rep_n_01, EXTTRAIL F:\app\Administrator\ogg\dirdat\n1, CHECKPOINTTABLE ogg.checkpoint

最後一步中的F:\app\Administrator\ogg\dirdat\n1檔案是從Linux伺服器遠端投遞過來的。

 

defgen.prm

DEFSFILE F:\app\Administrator\ogg\dirdef\rep_old.def

USERID ogg, PASSWORD oracle

TABLE scott.test_table1;

DEFSFILE參數列示所要生成的資料定義檔案。

 

initext.prm

SOURCEISTABLE

USERID ogg, PASSWORD oracle

RMTHOST 192.168.6.135, MGRPORT 7809

RMTFILE /u01/ogg/dirdat/init_01, MEGABYTES 2, PURGE

TABLE scott.test_table1;

這個引數檔案暫時不用。

 

mgr.prm

PORT 7809

DYNAMICPORTLIST 7810-7830

STARTUPVALIDATIONDELAYCSECS 10

PURGEOLDEXTRACTS F:\app\Administrator\ogg\dirdat\o1*, USECHECKPOINTS, MINKEEPHOURS 4, MINKEEPFILES 4

 

ext_o_01.prm

EXTRACT ext_o_01

USERID ogg, PASSWORD oracle

EXTTRAIL F:\app\Administrator\ogg\dirdat\o1

DISCARDFILE F:\app\Administrator\ogg\discard\ext_o_01_discard.txt, PURGE, MEGABYTES 200

TRANLOGOPTIONS EXCLUDEUSER ogg

TABLE scott.test_table1;

 

pum_o_01.prm

EXTRACT pum_o_01

USERID ogg, PASSWORD oracle

RMTHOST 192.168.6.135, MGRPORT 7809

RMTTRAIL ./dirdat/o1

TABLE scott.test_table1;

 

rep_n_01.prm

REPLICAT rep_n_01

USERID ogg, PASSWORD oracle

DISCARDFILE F:\app\Administrator\ogg\dirdat\rep_n_01_discard.txt, PURGE, MEGABYTES 200

SOURCEDEFS F:\app\Administrator\ogg\dirdef\rep_new.def

MAP haishu.test_table2, TARGET scott.test_table1,

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),

COLMAP

(

id=id,

name=username

);

1SOURCEDEFS表示源機器的資料結構定義檔案。對於複製程式來說,是要從別的機器複製東西過來,所以源機器自然就是遠端Linux伺服器,目標機器則是本機。rep_new.def是從遠端Windows機器複製過來的,不是本機生成的。

MAP haishu.test_table2, TARGET scott.test_table1, 表示從haishu.test_table2中(透過一些程式)複製資料到scott.test_table1中。

name=username,左邊的name表示本機test_table1中的欄位,右邊的username表示rep_new.def中的欄位,即遠端Linux伺服器中的欄位。

 

2:如果把SOURCEDEFS ./dirdef/rep_old.def換成assumetargetdefs,則colmap中兩邊的欄位都要寫成本機中的欄位,即:

REPLICAT rep_n_01

USERID ogg, PASSWORD oracle

DISCARDFILE F:\app\Administrator\ogg\discard\rep_n_01_discard.txt, PURGE, MEGABYTES 200

ASSUMETARGETDEFS

MAP haishu.test_table2, TARGET scott.test_table1,

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),

COLMAP

(

id=id,

name=name

);

 

2 Linux伺服器

檔名

存放路徑

GLOBAL

/u01/ogg

addcmds.txt

/u01/ogg/dirprm

defgen.prm

/u01/ogg/dirprm

initrep.prm

/u01/ogg/dirprm

mgr.prm

/u01/ogg/dirprm

ext_n_01.prm

/u01/ogg/dirprm

pum_n_01.prm

/u01/ogg/dirprm

rep_o_01.prm

/u01/ogg/dirprm

注:ext_n_01pum_n_01中的n代表new,表示本機Linux中的資料庫是新庫。rep_o_01中的o代表old,表示程式的作用是複製Windows老庫中的資料。

 

GLOBAL

GGSCHEMA ogg

CHECKPOINTTABLE ogg.checkpoint

 

addcmds.txt

--login

DBLOGIN USERID ogg, PASSWORD oracle

--create a CHECKPOINTTABLE

--ADD TRANDATA haishu.test_table2

ADD CHECKPOINTTABLE ogg.checkpoint

--create a Extract group

ADD EXTRACT ext_n_01, TRANLOG, BEGIN now

ADD EXTTRAIL ./dirdat/n1, EXTRACT ext_n_01

--create a data pump group

ADD EXTRACT pum_n_01, EXTTRAILSOURCE ./dirdat/n1, BEGIN now

ADD RMTTRAIL F:\app\Administrator\ogg\dirdat\n1, EXTRACT pum_n_01

--create a Replicat group

ADD REPLICAT rep_o_01, EXTTRAIL ./dirdat/o1, CHECKPOINTTABLE ogg.checkpoint

 

defgen.prm

DEFSFILE ./dirdef/rep_new.def

USERID ogg, PASSWORD oracle

TABLE haishu.test_table2;

DEFSFILE參數列示所要生成的資料定義檔案。

 

initrep.prm

SPECIALRUN

END RUNTIME

USERID ogg, PASSWORD oracle

EXTFILE /u01/ogg/dirdat/init_01

TRAILCHARSET windows-936

GROUPTRANSOPS 5000

SOURCEDEFS ./dirdef/rep_old.def

MAP scott.test_table1, TARGET haishu.test_table2,

COLMAP

(

id=userid,

name=username

);

此引數檔案暫時不用。

 

mgr.prm

PORT 7809

DYNAMICPORTLIST 7810-7830

STARTUPVALIDATIONDELAYCSECS 10

PURGEOLDEXTRACTS /u01/ogg/dirdat/n1*, USECHECKPOINTS, MINKEEPHOURS 4, MINKEEPFILES 4

 

ext_n_01.prm

EXTRACT ext_n_01

USERID ogg, PASSWORD oracle

EXTTRAIL ./dirdat/n1

DISCARDFILE /u01/ogg/dirdat/ext_n_01_discard.txt, PURGE, MEGABYTES 200

TRANLOGOPTIONS EXCLUDEUSER ogg

TABLE haishu.test_table2;

 

pum_n_01.prm

EXTRACT pum_n_01

USERID ogg, PASSWORD oracle

RMTHOST 10.0.30.135, MGRPORT 7809

RMTTRAIL F:\app\Administrator\ogg\dirdat\n1

TABLE haishu.test_table2;

 

rep_o_01.prm

REPLICAT rep_o_01

USERID ogg, PASSWORD oracle

DISCARDFILE /u01/ogg/discard/rep_o_01_discard.txt, PURGE, MEGABYTES 200

SOURCEDEFS ./dirdef/rep_old.def

MAP scott.test_table1, TARGET haishu.test_table2,

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),

COLMAP

(

id=id,

username=name

);

1SOURCEDEFS表示源機器的資料結構定義檔案。對於複製程式來說,是要從別的機器複製東西過來,所以源機器自然就是遠端Windows伺服器,目標機器則是本機。rep_old.def是從遠端Windows機器複製過來的,不是本機生成的。

MAP scott.test_table1, TARGET haishu.test_table2, 表示從scott.test_table1中透過程式複製資料到haishu.test_table2中。

username=name,左邊的username表示本機haishu.test_table1中的欄位,右邊的name表示rep_old.def中的欄位,即遠端Linux伺服器中的欄位。

 

2:如果把SOURCEDEFS ./dirdef/rep_old.def換成assumetargetdefs,則colmap中兩邊的欄位都要寫成本機中的欄位,即:

REPLICAT rep_o_01

USERID ogg, PASSWORD oracle

DISCARDFILE /u01/ogg/dirdat/rep_o_01_discard.txt, PURGE, MEGABYTES 200

ASSUMETARGETDEFS

MAP scott.test_table1,TARGET haishu.test_table2,

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, IGNORE)),

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE))

COLMAP

(

id=id,

username=username

);

 

三、資料雙向複製

1 捕獲資料結構定義並傳到對方機器

1)捕獲Windows下的老庫表結構定義並複製到Linux下的相應位置

假如老庫與新庫相關表結構不完全一致,需要用命令生成結構定義檔案,並將該檔案複製到新庫。

    在命令提示符下執行並生成結構定義檔案(rep_old.def):

F:\app\Administrator\ogg> defgen paramfile F:\app\Administrator\ogg\dirprm\defgen.prm

 

將生成的檔案(F:\app\Administrator\ogg\dirdef\rep_old.def)用FileZilla工具或ftp傳到目標庫相應位置(/u01/ogg/dirdef/)。

 

2)捕獲Linux下的新庫表結構定義並複製到Windows下的相應位置

假如新庫與老庫相關表結構不完全一致,需要用命令生成結構定義檔案,並將該檔案複製到老庫。

    在命令提示符下執行並生成結構定義檔案(rep_new.def):

/u01/ogg> ./defgen paramfile /u01/ogg/dirprm/defgen.prm

 

將生成的檔案(/u01/ogg/dirdef/rep_new.def)用FileZilla工具或ftp傳到目標庫相應位置(F:\app\Administrator\ogg\dirdef\)。

 

2 執行obey指令碼

老庫:

GGSCI (John-PC) 1> obey .\dirprm\addcmds.txt

 

新庫:

GGSCI (localhost) 1> obey ./dirprm/addcmds.txt

 

3 啟動老庫和新庫程式並進行資料初始化

 

    啟動老庫管理程式:

GGSCI (John-PC) 1> DBLOGIN USERID ogg, PASSWORD oracle

GGSCI (John-PC) 2> START MANAGER

 

    啟動新庫管理程式:

GGSCI (localhost) 1> DBLOGIN USERID ogg, PASSWORD oracle

GGSCI (localhost) 2> START MANAGER

 

老庫開啟提取程式(ext_o_01)和投遞程式(pum_o_01):

GGSCI (John-PC) 1> START EXTRACT ext_o_01

GGSCI (John-PC) 2> START EXTRACT pum_o_01

 

新庫開啟複製程式:

GGSCI (localhost) 1> START REPLICAT rep_o_01

 

    新庫開啟提取程式(ext_n_01)和投遞程式(pum_n_01):

GGSCI (localhost) 1> START EXTRACT ext_n_01

GGSCI (localhost) 2> START EXTRACT pum_n_01

 

老庫開啟複製程式:

GGSCI (WIN-2008) 1> START REPLICAT rep_n_01

 

4 檢視老庫和新庫程式

    老庫:

GGSCI (John-PC) 1> INFO ALL

 

新庫:

GGSCI (localhost) 1> INFO ALL

 

5 測試

1)老庫插入資料

SQL> insert into scott.test_table1 values('001', 'scott-A');

SQL> commit;

SQL> select * from scott.test_table1;

 

GoldenGate使用Obey指令碼同步資料

 

新庫中檢驗

SQL> select * from haishu.test_table2;

 

ID        USERNAME

---------- --------------------

001     scott-A

 

2)新庫中插入資料

SQL> insert into haishu.test_table2 values('002', 'haishu-A');

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> select * from haishu.test_table2;

 

ID        USERNAME

---------- --------------------

002     haishu-A

001     scott-A

 

老庫中檢驗

SQL> select * from scott.test_table1;

 

GoldenGate使用Obey指令碼同步資料

 

3)老庫中刪除資料

SQL> delete from scott.test_table1 where name='haishu-A';

SQL> commit;

SQL> select * from scott.test_table1;

 

GoldenGate使用Obey指令碼同步資料

 

新庫中檢驗

SQL> select * from haishu.test_table2;

 

ID        USERNAME

---------- --------------------

001     scott-A

 

4)新庫中刪除資料

SQL> delete from haishu.test_table2;

 

1 row deleted.

 

SQL> commit;

 

Commit complete.

 

SQL> select * from haishu.test_table2;

 

no rows selected

 

老庫中檢驗

SQL> select * from scott.test_table1;

 

GoldenGate使用Obey指令碼同步資料


 

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

相關文章