A. 安装需求

1)内存要求

GoldenGate对操作系统内存的需求主要取决于ExtractReplicat进程数,一般建议>2G

2DISK空间需求

  由于要数据库必须设置为归档模式,所以要求至少保存7天以上的日志,建议剩余空间在10G~100G之间。

3)对于RAC环境

GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩余的node启动而无须修改任何配置参数。否则如果运行在单个node上的话,需要将剩余node中的归档日志通过一定的技术共享出来并加载到GoldenGate运行节点。

对于RAC环境,GoldenGate要求所有node必须保持时钟同步,同时必须保持所有RAC node和运行extract进程的node节点保持时钟同步。因为GoldenGate会比较本地的系统时间和commit时间戳。所以不能忽略这个设置。否则可能导致数据复制的紊乱


本次测试环境:

环境:RHEL5U464

Oracle10.2.0.1.0-64,全部都开启了归档,字符集一致

用户:scott,表结构都在,target表没有数据,源表有数据

Ogg也是64位的最新版本;



B. 安装过程

1、 oracle用户登录

#su - oracle

2、 /u01目录下创建oraclegoldengate目录

$ cd  /u01/app/oracle

$ mkdir  /u01/app/oracle/ogg11

3、 将解压好的goldengate文件解压到ogg11目录中

$ cd  /u01/app/oracle/ogg11

$ tar  xvf  /soft/fbo_ggs_Linux_x64_ora10g_64bit.tar   //将其它目录下的压缩包中的文件,解压到当前目录下

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

上述操作可以概括为,图形化取得,解压的最终ogg安装文件夹,放到一个位置,改变文件夹的拥有者为oracle.oinstall 就可以了。 这样oracle用户就可以操作了。。。

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


4、 配置oracle用户的环境变量.Bash_profile文件

TMP=/tmp;export TMP

TMPDIR=$TMP;export TMPDIR

ORACLE_BASE=/u01/app/oracle;export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;export ORACLE_HOME

ORACLE_SID=ogg1;export ORACLE_SID

LD_LIBRARY_PATH=/ogg:$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

PATH=/ogg:$ORACLE_HOME/bin:$PATH; export PATH


注意:

除了红字字体,皆为oracle用户的原先环境变量,红色字体是后加的,给ogg使用的环境变量。

紫色的为数据库的sid ,这里是源端的数据库SID,为了方便识别数据库source端和target端。



5、 执行ggsci命令(通常是在OGG11文件夹下执行)

$ ggsci

GGSCI (localhost.localdomain) 1>create subdirs    //创建初始化文件

GGSCI (localhost.localdomain) 1>quit      //退出,安装完成


C. 配置数据库(2个数据库都要配)

1、 创建ogg数据库用户(2个数据库)

这里我们使用默认的SCOTT用户所以不用创建用户;

2、 Sql> @demo_ora_create   创建试验表(在两个scott用户下执行这脚本,各生成2个空表)

3、 Sql> @demo_ora_insert    在源端导入数据(目标端不用执行此脚本)


先进入/ogg目录 ,然后再sqlplus,否则要在脚本前加上@/ogg/xxx.sql


4、 数据库开启redo额外信息功能(源端配置)

sys> alter database add supplemental log data; 将额外的信息(除了rowid之外的日志信息)添加到redo日志里面。

sys> alter system switch logfile;  切换日志文件

sys> select supplemental_log_data_min from v$database; 检查是否开启(ogg必须开启,ogg依靠这个额外信息来进行工作)

sys>exit

5、 Ogg配置(源)

Ggsci> dblogin userid system,password oracle  登陆到oracle数据库

*Ggsci> add trandatascott.tcustmer指定scott用户schematcustmer表的额外信息添加到redo日志中,这样ogg就能捕获分析传到远端,否则数据库开启的附加信息也没有意义,下同;

*Ggsci> add trandata scott.tcustord   指定scott用户schematcustord表的额外信息添加到redo日志中


小提示: 如果所有表都要同步,可以使用SCOTT.*来表示哦^.^


添加完成之后可以看到完成状态

GGSCI (ogg1) 4> info trandata scott.*


Logging of supplemental redo log data is disabled for table SCOTT.BONUS.


Logging of supplemental redo log data is disabled for table SCOTT.DEPT.


Logging of supplemental redo log data is disabled for table SCOTT.EMP.


Logging of supplemental redo log data is disabled for table SCOTT.SALGRADE.


Logging of supplemental redo log data is enabled for table SCOTT.TCUSTMER


Logging of supplemental redo log data is enabled for table SCOTT.TCUSTORD


a、配置ogg管理进程(2个端都要执行)

Ggsci> edit params mgr  à  

port 7809    编辑端口7809(默认)

GGSCI> START MGR                      启动管理进程

GGSCI> INFO MGR                       查看管理进程


b、增加extract进程(source端,初始化进程)

Ggsci> add extract einikk, sourceistable  

增加抽取进程einixx,eini为规定格式XX随便写,sourceistable表示一次全部抽取出来,是初始化操作


c、编辑extract进程

 GGSCI> edit params einikk  为这个抽取组增加一个配置文件(大小写皆可)

extract einikk

userid system, password "111111"

rmthost 192.168.1.31, mgrport 7809

rmttask replicat,group rinikk

table scott.*;


d、 增加replicat进程(target端配置,接收进程)

Ggsci> add replicat rinikk, specialrun


e、 编辑replication进程(target)

Ggsci> edit params rinikk

replicat rinikk

assumetargetdefs

userid system, password 111111

discardfile ./dirrpt/rinikk.dsc, purge

map scott.*, target scott.*;


f、 启动replication进程(target)

Ggsci> start replicat rinikk


g、 启动extract进程(source端)

Ggsci> start extract einikk


注意:初始化进程,在info all里面是看不到进程状态的,可以使用view report einikk来观察初始化进程的执行情况。当然了,这个是需要等待一会的,立刻看是没有东西的。



1、 新增extract进程(source端)

Ggsci>add extract eorakk,  tranlog,  begin now,  threads 1

--ora表示联机,tranlog表示 从日志抓取,begin now 现在就抓取,threads 1 表示只有1个实例源


2、 编辑extract进程参数文件(source端)

Ggsci> edit params eorakk

extract  eorakk

userid system, password 111111

rmthost 192.168.1.31, mgrport 7809

rmttrail ./dirdat/kk这个是远端的trail位置,不是本地

table scott.*;


3、 新增远程trail文件(source端)

Ggsci> add rmttrail ./dirdat/kk,  extract eorakk,  megabytes 5  

./dirdat/kk远程的trail文件路径(需要执行命令的时候,在/ogg目录下)

extract eorakk 代表远程trail文件对应的本地extract进程

megabytes 5 代表每个文件大小为5M,不指定就是10M


4、 Start extract eorakk process(source node)

Ggsci> start extract eorakk


Tips: when start eorakk extract process ,wait a moment, you will see the rmttrail file from rmt_computer(command: ls /ogg/dirdat/). And there is not anything before start extract eorakk process ^.^


5、 Edit global params(target node)

Ggsci> edit  params  ./GLOBALS                   全局英文一定要大写,否则必定出错!

checkpointtable system.scottchkpttable如果权限足够,最好放在对应的用户下


6、 Connect oracle from ggsci(target node)

Ggsci> dblogin userid system, password 111111连接数据库

Ggsci> add checkpointtable增加专用检查点表


7、 Add replicat rorakk process(target node)

Ggsci> add replicat rorakk,  exttrail  ./dirdat/kk

exttrail  ./dirdat/kk指定本进程的本地的接收trail文件为 ./dirdat/kk


8、 Edit replicat rorakk params(target node)

Ggsci> edit params rorakk

replicat rorakk

userid system, password 111111

handlecollisions当目标端已有数据时,略过重复数据错误

assumetargetdefs说明源和目标的表结构完全相同

discardfile ./dirrpt/rorakk.dsc, purge

map scott.*, target scott.*;


9、 Start replicat rorakk process(target node)

Ggsci> start replicat rorakk


至此,ogg单向DML复制配置完成,去源端数据库修改一下,再提交,然后再来target端看看数据库里面的数据是不是被同步了,很简单吧^o^



进阶设置:

1、 Source端配置

配置MGR

Ggsci> edit params mgr              source端和target端都要配置

port 7809

dynamicportlist 7800-8000当端口无效的时候,自动切换其他端口。

purgeoldextracts./dirdat/*, usecheckpoints, minkeepdays 7自动清理过期(7)trail文件

autorestart extract *, waitminutes 2, retries 5

-- 指定Extract/Replicat进程的自动重启(每次尝试时间间隔为2秒,最多尝试5)

--会有警告出现,但是没有关系,以上设置正常可用;


启动MGR

Ggsci> start mgr


新增extract进程

Ggsci> add extract eorakk,  tranlog,  begin now,  threads 1


编辑Extract文件

Ggsci> edit extract eorakk

extract  eorakk

userid system, password 111111

exttrail ./dirdat/dd

table scott.*;


增加本地trail文件

ggsci> add extrail ./dirdat/dd, extract eorakk    本地trail文件名和远程的不要一致,可能会导致异常


增加PUMP进程

Ggsci>add extract pumpkk, exttrailsource ./dirdat/dd, begin now


增加指定远程trail文件位置

Ggsci> add rmttrail ./dirdat/kk, extract pumpkk


编辑pump进程参数

Ggsci> edit params pumpkk

extract pumpkk

userid system, password 111111

rmthost 192.168.1.31, mgrport 7809远程主机信息

rmttrail ./dirdat/kk远程trail

table scott.*;                            远程scheme及对象


2、 Target端配置

配置MGR

Ggsci> edit params mgr              source端和target端都要配置

port 7809

dynamicportlist 7800-8000当端口无效的时候,自动切换其他端口。

purgeoldextracts./dirdat/*, usecheckpoints, minkeepdays 7自动清理过期(7)trail文件autorestart extract *, waitminutes 2, retries 5

-- 指定Extract/Replicat进程的自动重启(每次尝试时间间隔为2秒,最多尝试5)

--会有警告出现,但是没有关系,以上设置正常可用;


启动MGR

Ggsci> start mgr


Edit global params(target node)

Ggsci> edit  params  ./GLOBALS                   全局英文一定要大写,否则必定出错!

checkpointtable  system.scottchkpttable如果权限足够,最好放在对应的用户下


Connect oracle from ggsci(target node)

Ggsci> dblogin userid system, password 111111连接数据库

Ggsci> add checkpointtable增加专用检查点表


Add replicat rorakk process(target node)

Ggsci> add replicat rorakk,  exttrail  ./dirdat/kk ,begin now, checkpointtable  system.checkpoint

exttrail  ./dirdat/kk  指定本进程的本地的接收trail文件为 ./dirdat/kk


编辑参数文件

Ggsci> edit params rorakk

replicat rorakk

userid system, password 111111

handlecollisions当目标端已有数据时,略过重复数据错误

assumetargetdefs说明源和目标的表结构完全相同

discardfile ./dirrpt/rorakk.dsc, purge

map scott.*, target scott.*;


启动接收进程

Ggsci> start replicat rorakk