摘要:

  • sybase版本:Sybase15(源端)
  • Oracle版本:11g(目标端)
  • Goldengate版本:11.2.0.1.0(源端),12c(目标端)
  • 个人博客:www.czhiying.cn

Goldengate同步原理:

   Oracle GoldenGate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。参考图如下:

  从上图可以知道,Ogg的同步实现方式有两种:

  1. 在源端建立Extract进程捕获日志变化,形成Ogg自身定义的Trail文件,Trail文件不保存在本地,通过网络方式,直接传输到目的端;然后目的端通过Replicat进程解析Trail文件,将变化支付到目标端数据库;
  2. 在 源端建立Extract进程捕获日志变化,形成Ogg自身定义的Trail文件,Trail文件保存在本地,然后在源端建立Data Pump进程(实际也是Extract进程,不过职能不同,我们在叫法上将其区分);然后通过Data Pump进程将产生的Trail文件传输到目的端;然后目的端通过Replicat进程解析Trail文件,将变化支付到目标端数据库;

  既然存在两种同步方式,存在即有理,但是我还是推荐使用第二种方式同步数据。因为这样本地有保存Trail文件,有保障一点。所以我下面的介绍也是基于第二种方式来进行同步的。

同步思路:

  1. 由于源数据库和目标数据库属于异构关系,表结构不同,故需要使用Ogg提供的表结构定义工具将源数据库的表结构定义出来,提供给目标数据库解析。
  2. 数据同步存在数据初始化和数据增量同步。故此,在准备进行数据初始化时,需保证Ogg对源数据库的捕获进程为开启状态。这样,便可以实现源/目标数据库的数据一致性。

同步步骤:

  1. 源端sybase建立goldengate同步用户,需要权限 sa_role,replication_role;
  2. 在需要同步的库上,开启第二事务截断点;

假设需要同步的库是test,则使用isql进入sybase命令行后,执行

use test
go
dbcc settrunc(ltm,valid)
go

目的:ogg的捕获进程可以成功捕获到事务日志变化的保证;如果没有开启此选项,extract进程启动将会失败,各位可以试验一下。其实,如果没有开启此选项,当你使用ggsci进行添加附加日志的时候,ggsci也会提醒你没有开启某个库的第二事务截断点选项。

注意:这里的ltm选项可以说又爱又恨啊,为什么这么说呢,请看我另外一篇文章。

  3.进入ggsci控制台,使用dblogin访问数据库,添加表级附加日志;

进入ggsci控制台后,使用命令:

dblogin sourcedb 数据源,userid 用户名,password 密码

注意:因为gg是oracle的产品,所以其他的数据库需要使用odbc建立数据源,让oracle能访问到其数据库,如何建立数据源,可以去上度娘,这里就不做介绍了。

success后使用命令添加附加日志:

add trandata test.test; (这里的test.test的意思是,对test库下的test表添加附加日志。)

成功添加的话,将会看到enable的相关信息,同时,如果这里没对同步库开启ltm选项的话,将会看到一条提醒,不过不用担心,你过会再去开启也行,反正在extract进程启动之前开启就行。

  4.配置ogg针对源数据库(Sybase数据库)的捕获进程;

prm文件:

EXTRACT ext_test   --捕获进程名称
sourcedb test,userid sa,password 123456
EXTTRAIL dirdat/te
DISCARDFILE dirrpt/ext_test.dsc , APPEND
REPORTCOUNT EVERY 10000 RECORDS, RATE
GETTRUNCATES
table dbo.test;  --声明需要捕获数据变化的表

ggsci控制台:

edit params ext_test(将会创建一个ext_test.prm的参数文件,将上述参数复制进该文件)
add extract ext_test,tranlog,begin now(创建extract进程)
add exttrail dirdat/te,extract ext_test,megabytes 100(创建exttrail,既抓取数据后记录到本地trail文件)

启动extract进程:

start ext_test

如无意外,进程启动成功。如果这里启动失败的话,请使用命令,view report ext_test,查看错误报告,如果解决不了,可留下评论,博主看到会帮你解决。

  5.源端配置、启动数据泵进程

目的:由于Ogg将捕获到的数据变化记录为自身定义的trail文件并存放于本地文件中,故需要使用数据泵进程将这些trail文件远程投递到目标机上。

ggsci控制台:

edit params dp_test

参数文件配置:

EXTRACT dp_test
sourcedb test,userid sa,password 123456
RMTHOST 127.0.0.1(准备投递的远程主机Ip), MGRPORT 7810(远程主机mgr进程的端口号)
RMTTRAIL D:\ogg112101_ggs_Windows_x86_ora11g_32bit\dirdat\du
discardfile  dirrpt/dumpdsc.dsc,append,megabytes 1024
TABLE dbo.test;add extract dp_test,exttrailsource dirdat/te(这里创建数据泵进程,trail源是刚刚捕获进程设置的trail路径)
add rmttrail D:\ogg112101_ggs_Windows_x86_ora11g_32bit\dirdat\du,extract dp_test,megabytes 100(这里创建rmttrail定义)
start dp_test

如无意外,进程成功开启。这里要注意的一点是,准备投递过去的那台电脑,必须先安装好ogg,由于博主这里是使用同一台电脑,所以博主这里安装了两个Ogg,一个for sybase,一个for oracle,两个是不同端口的。

  6.目标端配置、启动应用进程

目的:将源端投递过来的trail文件进行解密、分析,将源端的增量数据同步更新到目标数据库。

目标端ggsci:

edit params rep_test

参数文件配置:

REPLICAT rep_test
SOURCEDEFS dirdef/def_test.def
USERID ogg, PASSWORD 123456
Discardfile dirrpt/rep_test.dsc,append,megabytes 1024
REPERROR (DEFAULT, discard)
Map dbo.test, TARGET ogg.TEST;Dblogin userid ogg, password 123456(访问oracle数据库,目的是建checkpoint表)
Add checkpointtable ogg.chkpt_test(表名随意,有意义就行)
add replicat rep_test,exttrail dirdat/du,CHECKPOINTTABLE ogg.chkpt_test(这里的exttrail,是指源端投递过来的trail文件)
start rep_test

启动成功,即可在sybase端试试插入数据,更新数据,删除数据,是否会进行同步。