GoldenGate使用Obey脚本同步数据

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;

 

2Q==

 

新库中检验

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;

 

2Q==

 

3)老库中删除数据

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

SQL> commit;

SQL> select * from scott.test_table1;

 

9k=

 

新库中检验

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;

 

2Q==


 

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

转载于:http://blog.itpub.net/29485627/viewspace-1769950/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值