ITPub博客

首页 > 数据库 > Oracle > GoldenGate实现Windows与Linux之间的双向同步

GoldenGate实现Windows与Linux之间的双向同步

Oracle 作者:SmartWilson 时间:2016-05-10 17:47:18 0 删除 编辑

一、数据库环境


1 本机,Win7系统,Oracle 11g,IP为10.0.30.135


2 虚拟机,Oracle Linux 6.5系统,Oracle 11g, IP为192.168.6.135


3 关闭两台机器的防火墙


4 测试两台机子是否能互相拼通


1)Windows ping Linux



2)Linux ping Windows


# ping 10.0.30.135 -c 4

PING 10.0.30.135 (10.0.30.135) 56(84) bytes of data.

64 bytes from 10.0.30.135: icmp_seq=1 ttl=128 time=0.967 ms

64 bytes from 10.0.30.135: icmp_seq=2 ttl=128 time=0.857 ms

64 bytes from 10.0.30.135: icmp_seq=3 ttl=128 time=0.723 ms

64 bytes from 10.0.30.135: icmp_seq=4 ttl=128 time=0.825 ms

 

--- 10.0.30.135 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3032ms

rtt min/avg/max/mdev = 0.723/0.843/0.967/0.087 ms


 


 


二、数据同步思路


1 先考虑数据从Windows服务器到Linux服务器的同步过程


(1)首先需要在Windows服务器中开启一个抽取进程,作用是把本机数据库里的相关日志信息读取到本地的trail文件中。


(2)其次在Windows服务器中开启一个投递进程,作用是把本地的trail文件,即F投递到远程Linux服务器中。


(3)最后在Linux服务器中开启一个复制进程,其作用是从本机的trail文件(上一步从Windows服务器中投递过来的)中的数据信息读取到本地数据库中。


 


整个过程如下图所示:



 


2 再考虑数据从Linux服务器到Windows服务器的同步过程


与1中的步骤类似,也需要三个步骤


(1)在Linux中开启抽取进程,作用是把本机数据库中的相关日志信息读取到本地trail文件中。


(2)在Linux中开启投递进程,作用是把上一步得到的trail文件投递到远程Windows服务器中。


(3)在Windows中开启同步进程,作用是把本机中的trail文件(上一步中从Linux服务器中投递过来的)中的数据信息读取到本机数据库中。


 


 


三、安装GoldenGate


见第一章第一节和第二节。


 


 


四、配置Windows和Linux的Manager进程


1 Windows下的Manager进程配置步骤见本章第一节


2 Linux下的Manager进程配置步骤见本章第三节


 


五、添加checkpoint表


1 Windows下添加checkpoint表的步骤见本章第一节


2 Linux下添加checkpoint表的步骤见本章第三节


 


 


六、配置从Windows到Linux的数据同步


1 配置Windows服务器的抽取进程


GGSCI (John-PC) > add extract ext_w,tranlog, begin now

GGSCI (John-PC) > add exttrail F:\app\Administrator\ogg\dirdat\wt, extract ext_w


这里ext_w中的w代表Windows平台,也可以起其他名字,但最好起的有意义一点。


add exttrail表示把相关日志信息抽取到本地trail文件中,wt代表本地Windows服务器的trail文件。也可以起其他的名字,但最好起得有意义一点,并且必须是两个字符。此进程启动后,GoldenGate会自动在wt后面添加6位数字,比如wt000000。


如果是用add rmttrail,则表示直接抽取到远程服务器中,这样就不需要投递进程了。



 


编辑抽取进程ext_w参数:


GGSCI (John-PC) > edit params ext_w


 


在弹出框中选“是”



 


在ext_w.prm中输入参数


extract ext_w

userid ogg, password oracle

exttrail F:\app\Administrator\ogg\dirdat\wt

table scott.test_table;


 


保存并关闭



 


2 配置Windows服务器的投递进程


GGSCI (John-PC) > add extract pum_w, exttrailsource F:\app\Administrator\ogg\dirdat\wt, begin now

GGSCI (John-PC) > add rmttrail /u01/ogg/dirdat/rt, extract pum_w


这里pum_w中的w代表Windows平台,可起为其他名字,但最好起的有意义一点。


wt表示Windows下的trail文件,是在上一步中通过抽取进程得到的。


rt表示远程remote,即Linux服务器中的trail文件,可以修改为其他的名字,但最好起的有意义一点,且必须为两个字符。当此进程启动时,rt后面会自动加上六位数字,变成形如rt000000的文件名。


这两个句子的意思是把上一步抽取进程产生的文件F:\app\Administrator\ogg\dirdat\wt投递为远程的/u01/ogg/dirdat/rt文件。



 


编辑投递进程参数


GGSCI (John-PC) > edit params pum_w


 


弹出框中选“是”



 


在pum_w.prm中输入参数


extract pum_w

userid ogg, password oracle

rmthost 192.168.6.135, mgrport 7809

rmttrail /u01/ogg/dirdat/rt

table scott.test_table;


 


保存并关闭



 


3 配置Linux服务器的复制进程


GGSCI (localhost) 12> add replicat rep_l, exttrail /u01/ogg/dirdat/rt, checkpointtable ogg.checkpoint

REPLICAT added.


rep_l中的l代表linux服务器,也可以随意取其他的名字,但最好能取个望文知义的名字。


add replicat rep_l, exttrail F:\app\Administrator\ogg\dirdat\rt表示通过rep_l进程从本机(这里指Linux服务器)的/u01/ogg/dirdat/rt文件中复制数据到数据库中,ogg.checkpoint则为rep_l的容器表。这里/u01/ogg/dirdat/rt是从上一步得到的。


 


编辑复制进程参数


GGSCI (localhost) 13> edit params rep_l


 


在打开的/u01/ogg/dirprm/rep_l.prm中输入如下内容:


replicat rep_l

userid ogg, password oracle

assumetargetdefs

discardfile /u01/ogg/dirdat/rep_l_discard,append

map scott.test_table, target haishu.test_table

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE))

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE));


 


4 测试


(1)启动Windows和Linux的manager进程



 


GGSCI (localhost) 1> start mgr

 

Manager started.

 

 

GGSCI (localhost) 2> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

REPLICAT    STOPPED     REP_L       00:00:00      01:01:11


 


(2)启动Windows服务器的ext_w和pum_w进程



 


(3)启动Linux服务器的rep_l进程


GGSCI (localhost.localdomain) 12> start rep_l

 

Sending START request to MANAGER ...

REPLICAT REP_L starting

 

 

GGSCI (localhost.localdomain) 13> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

REPLICAT    RUNNING     REP_L       00:00:00      00:00:09 


 


(4)在Windows服务器中插入一条数据,并在Linux服务器中检验


SQL> insert into scott.test_table values(‘scott-001’);

SQL> commit;


 



 


 [oracle@localhost ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 29 14:36:46 2015

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> select * from haishu.test_table;

 

ID

----------

scott-001

 

SQL>


 


测试结果显示数据成功从Windows服务器同步到Linux服务器。


 


 


七、从Linux到Windows的数据同步


 


1 配置Linux服务器的抽取进程


GGSCI (localhost) 7> add extract ext_l,tranlog, begin now

EXTRACT added.

 

 

GGSCI (localhost) 8> add exttrail /u01/ogg/dirdat/lt, extract ext_l

EXTTRAIL added.


这里ext_l中的l代表linux平台。


lt代表linux下的trail文件写。也可以用其他的字符,但最好是有意义的字符,且必须是两个字符。进程启动后lt后会自动加上六个数字,生成的trail文件名类似lt000000。


add exttrail /u01/ogg/dirdat/lt, extract ext_l表示通过ext_l进程把数据抽取到本地(这里指的是Linux服务器)的/u01/ogg/dirdat/lt文件中。


 


编辑抽取进程ext_l参数:


GGSCI (localhost) > edit params ext_l


 


在打开的/u01/ogg/dirprm/ext_l.prm中输入内容


extract ext_l

userid ogg, password oracle

exttrail /u01/ogg/dirdat/lt

table haishu.test_table;


 


2 配置Linux服务器的投递进程


GGSCI (localhost) 17> add extract pum_l, exttrailsource /u01/ogg/dirdat/lt, begin now

EXTRACT added.

 

 

GGSCI (localhost) 18> add rmttrail F:\app\Administrator\ogg\dirdat\rt, extract pum_l

RMTTRAIL added.


这里pum_l中的l代表Linux平台,可起为其他名字,但最好起的有意义一点。


lt表示Linux下的trail文件,是在上一步中通过抽取进程得到的。


rt表示远程remote,即Windows服务器中的trail文件,可以修改为其他的名字,但最好起的有意义一点,且必须为两个字符。当此进程启动时,rt后面会自动加上六位数字,变成形如rt000000的文件名。


这两个句子的意思是把上一步抽取进程产生的文件/u01/ogg/dirdat/lt投递为远程的F:\app\Administrator\ogg\dirdat\rt文件。


 


编辑投递进程参数


GGSCI (localhost) > edit params pum_l


 


在打开的/u01/ogg/dirdat/pum_l.prm文件中输入参数


extract pum_l

userid ogg, password oracle

rmthost 10.0.30.135, mgrport 7809

rmttrail F:\app\Administrator\ogg\dirdat\rt

table haishu.test_table;


 


3 配置Windows服务器的复制进程


GGSCI (John-PC) > add replicat rep_w, exttrail F:\app\Administrator\ogg\dirdat\rt, checkpointtable ogg.checkpoint


这里add replicat rep_w, exttrail F:\app\Administrator\ogg\dirdatrtl表示通过rep_w进程从本机(这里指Windows服务器)的F:\app\Administrator\ogg\dirdat\rt文件中复制数据到数据库中,ogg.checkpoint则为rep_w的容器表。



 


编辑复制进程内容


GGSCI (John-PC) > edit params rep_w


 


弹出框中选“是”



 


在新打开的rep_w.prm中输入如下内容并保存


replicat rep_w

userid ogg,password oracle

assumetargetdefs

discardfile F:\app\Administrator\ogg\dirdat\rep_w_discard.txt,append

map haishu.test_table, target scott.test_table

RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE))

RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE))

RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE));


 



 


4 测试


(1)分别启动Linux和Windows服务器的Manager进程


(2)启动Linux服务器的ext_l和pum_l进程


GGSCI (localhost.localdomain) 21> start ext_l

 

Sending START request to MANAGER ...

EXTRACT EXT_L starting

 

 

GGSCI (localhost.localdomain) 22> start pum_l

 

Sending START request to MANAGER ...

EXTRACT PUM_L starting

 

 

GGSCI (localhost.localdomain) 23> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

EXTRACT     RUNNING     EXT_L       00:15:29      00:00:06   

EXTRACT     RUNNING     PUM_L       00:00:00      00:08:38   

REPLICAT    RUNNING     REP_L       00:00:00      00:00:08      


 


(3)启动Windows服务器的rep_w进程



 


(4)在Linux服务器插入一条数据


SQL> insert into haishu.test_table values('haishu-001');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL>


 


在Windows中检验


SQL> select * from scott.test_table;


 



 


(5)在Windows中删除一条数据


SQL> delete from scott.test_table where id='haishu-001';

SQL> commit;


 



 


在Linux中检验


SQL> select * from haishu.test_table;

 

ID

----------

scott-001

 

SQL>


 


(6)在Linux中删除一条数据


SQL> delete from haishu.test_table where id='scott-001';

 

已删除 1 行。

 

SQL> commit;

 

提交完成。

 

SQL>


 


在Windows中检验


SQL> select * from scott.test_table;


 



 


上述三次实验结果表明成功实现了数据在Windows和Linux之间的双向同步。



原文地址:http://lovewifelovelif.blog.itpub.net/29485627/viewspace-1766772/

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

请登录后发表评论 登录
全部评论

注册时间:2015-04-24

  • 博文量
    34
  • 访问量
    106205