Skip to content


玩玩GoldenGate

前一段跟着Quest的朋友学习了一些SharePlex的东西,最近Oracle则在大力推广另一个类似的产品GoldenGate,手头的资料不多,只有一份官方文档和一份所谓的培训教材PPT,不过可操作性不强,上手有点难,后来看了这篇文章,才终于把基本的同步实现了。不过这位作者显然已经研究不少时间的GG,所以很多命令并没有写明,这里我把它补充一下吧。

1,数据库准备

1.1 检查SUPPLEMENTAL_LOG

和SharePlex一样,GG要求打开SUPPLEMENTAL_LOG,通过如下SQL可以查看:

SQL>select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

如果没有开启,则执行如下语句打开SUPPLEMENTAL_LOG:

SQL>alter database add supplemental log data;

1.2 建立测试用户

ggs和ggt分别为源数据用户和目标用户。

create user ggs identified by ggs default tablespace users;
grant connect,resource to ggs;
create user ggt identified by ggt default tablespace users;
grant connect,resource to ggt;

建立GG使用的用户gg。

create user gg identified by gg default tablespace users;
grant dba to gg;

2. 下载安装GoldenGate

需要到http://edelivery.oracle.com/下载对应版本的GoldenGate,我不太明白的是为什么这个GG的Product Pack是Oracle Fusion Middleware,另外,我是在RHEL5.0上做的实验,所以Platform我选择了Linux x86,下载文件大约27M。

为了简单,我直接使用操作系统的oracle用户安装GG。建立目录/home/oracle/ggs,把下载的文件unzip,然后存放到这个目录后执行:

tar -xvof ggs_redhatAS50_x86_ora11g_32bit_v10.4.0.19_002.tar

这样,/home/oracle/ggs就是我们的GG的目录了。这时候我们进入ggs目录,执行ggsci可能会报找不到库的错误,那是我们还没有配置LIB,对于我这个系统,我在.bash_profile里增加了如下几句:

LD_LIBRARY_PATH=/home/oracle/ggs:/u01/app/oracle/product/11.1.0/db_1/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:/home/oracle/ggs; export PATH

运行’.  .bash_profile’,或者重新登入oracle,再执行ggsci,就可以进入ggsci的管理界面,可以运行GG的命令了。这时,首先要做的就是建立GG的工作目录,我们运行:

CREATE SUBDIRS

(这一步最好在cd到/home/oracle/ggs,然后运行ggsci后执行,别的地方建立的环境有问题,我还是初学,应该有配置的方法,暂时不懂)

运行完毕,就生成了许多目录,这是GG配置文件,日志等文件的存放目录。

3. 配置最简单的实验

本次测试模拟的情况是:为了把ggs模式下的表中的数据变化同步到ggt模式的相关表中。本次配置不在源端缓存数据,直接把extract进程抓取的数据存储在目标端数据库服务器上,然后目标端数据库服务器的Replicat进程把队列中的数据投递到目标数据库中。相关配置命令和参数如下:

添加相关进程:

ADD EXTRACT ext1 TRANLOG, BEGIN NOW

ADD rmttrail /home/oracle/ggs/dirdat/r1  extract ext1

ADD replicat rep1 EXTTRAIL /home/oracle/ggs/dirdat/r1, nodbcheckpoint

运行edit param mgr,然后保存文件内容如下:

port 7809

运行edit param ext1 ,然后保存文件内容如下:

extract ext1
userid gg,password gg
rmthost 127.0.0.1, mgrport 7809
rmttrail /home/oracle/ggs/dirdat/r1
dynamicresolution
table ggs.*;

运行edit param rep1,然后保存文件内容如下:

replicat rep1
userid gg,password gg
assumetargetdefs
map ggs.*, target ggt.*;

然后启动必要的进程:

start mgr
start ext1
start rep1

这时可以运行info all来查看是否所有的进程都是正常运行:

GGSCI>  info all

Program  Status  Group  Lag  Time Since Chkpt

MANAGER  RUNNING
EXTRACT  RUNNING  EXT1  00:00:00  00:00:07
REPLICAT  RUNNING  REP1  00:00:00  00:00:08

4. 测试同步

使用sqlplus执行SQL语句:

create table ggs.tb1 (a number, CONSTRAINT pk1 PRIMARY KEY  (a))  ;

create table ggt.tb1 (a number, CONSTRAINT pk1 PRIMARY KEY  (a))  ;

然后运行:

insert into ggs.tb1 values (1);
commit;

看看是否同步到了ggt.tb1了?

Related posts:

  1. 我的Wordpress又升级了
  2. 缘起Oracle AS
  3. 简单目标-DBA
  4. 认证越来越复杂
  5. 给谁充值了?

Posted in oracle. Tagged with , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.