ORACLE GOLDENGATE安装配置

 

Oracle GoldenGate软件基于数据库日志结构变化,通过解析源端在线日志或归档日志获得数据增量,再将这些变化应用到目标数据库,从而实现源库和目标库的数据同步。下面通过一个简单的示例,详细介绍利用GoldenGate实现Oracle数据库之间的同步。

1. 安装
1.1 下载介质
GoldenGate的安装介质可以从Oracle的官网上下载。

http://www.oracle.com/technetwork/middleware/goldengate/overview/index.html

1.2 配置GoldenGate用户
下载完成后将其拷贝到源和目标的相应位置解压完成后,即可以开始进行配置。
# su – oracle
$ mkdir /u01/ggate
$ cd /u01/ggate
$ tar xvf …….tar

注意,如果使用Oracle 11g的数据库,需要创建一个link文件。
$ ln -s /u01/app/oracle/product/11.2.0/db_1/lib/libnnz11.so -
/u01/app/oracle/product/11.2.0/db_1/lib/libnnz10.so

$ vi ~/.bash_profile
添加如下的内容:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/u01/ggate
export GGATE=/u01/app/oracle/ggate

1.3 创建目录
使用ggsci工具,创建必要的目录。

$ cd /u01/app/oracle/ggate
$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 10 on Jul 28 2010 13:24:18

Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.

GGSCI (gridcontrol) 1> create subdirs

至此,GoldenGate基本的安装完成。
Note. 此部分需要在源端和目标端完成。

2. 源数据库配置
GoldenGate主要通过抓取源端数据库重做日志进行分析,将获取的数据应用到目标端,实现数据同步。因此,为了让GoldenGate能够正常工作,源数据库需要进行一定配置。

2.1 归档模式、附加日志、强制日志

--查看
select db.LOG_MODE, db.SUPPLEMENTAL_LOG_DATA_MIN, db.FORCE_LOGGING
   from v$ database db
--修改
--1)archivelog
shutdown immediate
startup mount
alter database archivelog;
alter database open ;
--2)force logging
alter database force logging;
--3)supplemental log data
alter database add supplemental log data;

2.2 关闭数据库的recyblebin
alter system set recyclebin=off scope=spfile;
如果数据库是10g,需要关闭recyclebin并重启;或者手工purge recyclebin。

2.3 配置复制的DDL支持

create user ggate identified by ggate default tablespace users temporary tablespace temp ;
grant connect ,resource,unlimited tablespace to ggate;
grant execute on utl_file to ggate;
 
@$GGATE/marker_setup.sql;
@$GGATE/ddl_setup.sql;
@$GGATE/role_setup.sql;
grant GGS_GGSUSER_ROLE to ggate;
@$GGATE/ddl_enable.sql;

2.4 创建源端和目标端的测试用户

--source
create user sender identified by oracle default tablespace users temporary tablespace temp ;
grant connect ,resource,unlimited tablespace to sender;
 
--destination
create user receiver identified by oracle default tablespace users temporary tablespace temp ;
grant connect ,resource,unlimited tablespace to receiver;

3. 配置manager
在源端和目标端分别执行下面的步骤。

3.1 创建manager
[ggate@gridcontrol gg]$ ./ggsci
GGSCI (gridcontrol) 1> info all
Program Status Group Lag Time Since Chkpt
MANAGER STOPPED
GGSCI (gridcontrol) 2> edit params mgr
PORT 7809
ggate (gridcontrol) 3> start manager
Manager started.

4. 配置源端复制队列
GGSCI (gridcontrol) 1> add extract ext1, tranlog, begin now
EXTRACT added.
GGSCI (gridcontrol) 2> add exttrail /u01/ggate/dirdat/lt, extract ext1
EXTTRAIL added.

GGSCI (gridcontrol) 3> edit params ext1
extract ext1
userid ggate@source, password oracle
rmthost centos4, mgrport 7809
rmttrail /u01/ggate/dirdat/lt
ddl include mapped objname sender.*;
table sender.*;

GGSCI (gridcontrol) 6> info all
Program Status Group Lag Time Since Chkpt
MANAGER STOPPED
EXTRACT STOPPED EXT1 00:00:00 00:10:55

5. 配置目标端同步队列
5.1 在目标端添加checkpoint表
[oracle@centos4 ggate]$ ./ggsci
GGSCI (centos4) 1> edit params ./GLOBAL –添加下列内容
GGSCHEMA ggate
CHECKPOINTTABLE ggate.checkpoint
GGSCI (centos4) 2> dblogin userid ggate password ggate
Successfully logged into database.

GGSCI (centos4) 3> add checkpointtable ggate.checkpoint
Successfully created checkpoint table GGATE.CHECKPOINT.

5.2 创建同步队列
GGSCI (centos4) 4> add replicat rep1, exttrail /u01/ggate/dirdat/lt, checkpointtable ggate.checkpoint
REPLICAT added.
GGSCI (centos4) 5> edit params rep1
replicat rep1
ASSUMETARGETDEFS
userid ggate,password ggate
discardfile /u01/ggate/dirdat/rep1_discard.txt, append, megabytes 10
DDL
map sender.*, target receiver.*;

6. 开启同步
GGSCI (gridcontrol) 14> start extract ext1
GGSCI (gridcontrol) 15> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT1 00:00:00 00:00:05

GGSCI (centos4) 7> start replicat rep1
GGSCI (centos4) 8> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP1 00:00:00 00:00:00



对于源端数据库,要做以下准备,这里以oracle为例,其它数据库请查找相关手册:

a.       在源端操作系统上,创建GoldenGate系统用户,设置该用户环境变量(如果是oracle数据库的话,ORACLE_SID,ORACLE_HOME等等),也可以采用oracle安装用户运行GoldenGate。建议采用oracle的安装用户安装运行GoldenGate,无需建立新用户,否则还得给新用户授一堆权,具体请参考安装手册。

b.       在数据库中创建GoldenGate数据库用户,名称无所谓,这里以goldengate为例,用户至少应该有connect,resource,select any dictionary,select any table的权限,当然如果能给dba,一切就都覆盖了:

             CREATE USER goldengate  IDENTIFIED BY goldengate;

                  GRANT dba TO goldengate;

c.        检查源端数据库是否为归档模式,若为非归档模式,建议将其改为归档模式,其实在非归档模式下也能运行,但以防万一,还是配置归档保险:

SQL> alter database archivelog;(需要在数据库mount状态下执行)

      SQL>archive log list;

d.       检查源端数据库附加日志是否打开

      SQL>select supplemental_log_data_min from v$database;

将数据库附加日志打开

SQL>alter database add supplemental log data;

切换日志以使附加日志生效:

SQLALTER SYSTEM ARCHIVE LOG CURRENT;

 在目标数据库上,也需要建立一个goldengate用户,或者利用现有用户也行,该用户应该至少有connect,resource,select any table,select any dictionary以及对应同步表的insert/update/delete权限。

 

1创建用户并授权:

在源端和目标端建立用户并授权:

 

 

 

 

2goldengate安装介质FTP上转到服务器,用zip/tar命令解包.

 

 

 

3然后运行(在源和目标上所有的执行步骤都一样,这里我们以17.42为例截屏):

./ggsci

如下图,在GGSCI提示符下运行create subdirs

 

 

至此,goldengate的安装完成。

 

goldengate的配置

 

在进行goldengate的配置之前,我们还需要对数据库进行一些操作,当然,这些操作也可以拿到后面进行,但必须在extract进程启动之前进行。

1.启动goldengate字符界面:

./ggsci

2.在提示符下运行dblogin

ggsci>dblogin userid <username>, password <password>

这里username是登录数据库的用户,它不一定是刚才我们为goldengate建立的数据库用户,但它必须有dba权限,password

Goldengate的配置有两种方式,第一种方式是采用命令行方式ggsci,另外一种是采用图形化终端的方式进行配置和监控:

1.采用字符终端的配置方式:

goldengate安装完成后,首先需要在源和目标各配置一个manager管理进程,然后启动,首先在ggsci下运行edit params mgr:

 

 

使用vi加入一行port 7809,端口号可以随意设置,只要不冲突,有权限即可。

 

 

存盘退出,然后运行start mgr,并检查manager进程的状态:

 

 

在源和目标上做同样的操作,务必保证源和目标的manager进程正常运行,否则后面的配置会出现错误。至此goldengate manager管理进程配置完毕.

 

1.1首先在源端配置数据捕获进程和数据传输进程,数据捕获进程负责将数据从数据库日志抓取出来,存放到一个队列文件中,数据传输进程负责将队列文件按照指定的业务逻辑传输到目标数据库。

1.1.1检查manager进程是否运行,如果没有,首先用start mgr启动它。添加捕获进程demo,并修改其配置参数:

添加的命令为:add extract <extract_name>,tranlog,<开始时间或者SCN或者RBA>

修改配置参数:edit params <extract_name>.

 

 

 

 

配置文件中的各项说明为:

Extract <extract_name>:指定刚才加入的extract的名字

SETENV():指定该extract启动时oracle相关的环境变量.

Userid <oracle_user>, password <oracle_password>:连接到源数据库的用户,既我们在第一步建立的源端数据库用户。

Report:指定每天在日志中产生报告的时间

Reportrollover:指定每天汇报队列文件切换报告的时间

Gettruncates:告诉extracttruncate操作也要捕获

Warnlongtrans:超过<n>个小时的交易为长交易,要在goldengate日志中进行记录,检查时间为指定的checkinterval

Tranlogoptions:针对源数据库的一些配置选项,如数据库归档的位置等等,本例子中的值是指当源和目标数据库字符集不一致,而且传输包含clob字段时,需要对clob中的字符集进行转换。

Fetchoptions:指定当从源数据库抓取数据时的一些选项,本例指不从undo tablespace取数据,而是从表里直接抽取。

Exttrail:本地队列文件,extract将数据从数据库日志抓取后存放在该队列文件。

Discardfile:指定丢弃数据的存放位置。

Dynamicresolution:指定当extract从日志抓取变化数据时,根据当前的需要,动态解析表名,从而加快抓取进程的启动速度。

Table <schema>.<table_name>:指定要从源系统抓取那些表的数据,这里schema不能用通配符,table_name可以用通配符。

 

存盘退回到ggsci命令终端,启动extract

 

 

通过info all来检查配置的捕获进程是否正常启动,如果有问题,则运行命令检查日志view report demo

最后添加队列文件,并将该队列文件指定给相应的捕获进程,注意队列文件的名字必须和extract的配置文件中的exttrail名字一致。

 

 

 

1.1.2检查目标端manager进程是否运行,否则start mgr启动它,添加传输进程dpdemo,并修改其配置参数:

 

 

这里要注意的是dpdemo也是用add extract命令来添加,但后面通过extrailsource来指明它的源数据是我们刚才建立的队列文件。

 

 

在上面的配置文件中,与前面demo中参数不一样的参数包含:

Passthru:表示传输进程在传输的过程中只负责文件传输,不进行任何转化。

Rmthost:目标端的机器IP地址或者主机名称。

Mgrport:目标端goldengate管理进程manager运行的端口号。

Rmttrail:当传输进程将队列文件传输的目标端后放置的目录和队列文件。

 

创建远程队列文件rmttrail,并将其指定给传输进程。

 

 

启动传输进程,并检查其状态(在启动传输进程前,必须确保目标端的manager进程已经启动,否则会启动失败)。

至此源端goldengate配置完毕。

 

1.2在源端配置完成后,我们配置目标端goldengate

 

 

 

 

最后启动repdemo并检查其状态:

 

 

至此,goldengate的安装和配置已经完成,但在同步数据之前,还有一些步骤要做,既对目标数据库的初始化,我们会在下一篇进行讨论.


 

4

4

 

 

 

GoldenGate测试环境:同一个库中测试

  os:redhat

  db:ora 10.2.0.4

  GoldenGate:10.4

 

安装测试的步骤:

1、数据库状态检查

   1.1 是否是归档模式

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     7
Next log sequence to archive   9
Current log sequence           9

 

   1.2 是否开启数据库最小附加日志参数

   SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

   SUPPLEME
   --------
   YES

   如果没有启动数据库最小数据库附加日志,通过如下命令,启动

SQL>alter database add supplemental log data;

   1.3 建立测试用户 ggs、ggt
   1.4 建立GoldenGate复制使用的数据库用户gg,为了测试方便给他赋予DBA权限。

2、GoldenGate进程和参数配置

本次测试模拟的情况是:为了把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


[oracle@as54x64 dirprm]$ more mgr.prm
port 7809
[oracle@as54x64 dirprm]$ more ext1.prm
extract ext1
userid gg,password gg
rmthost 127.0.0.1, mgrport 7809
rmttrail /home/oracle/ggs/dirdat/r1
dynamicresolution
table ggs.*;
[oracle@as54x64 dirprm]$ more rep1.prm
replicat rep1
userid gg,password gg
assumetargetdefs
map ggs.*, target ggt.*;

启动进程
cd /home/oracle/ggs/
./ggsci
GGSCI (leipeng) 17> start mgr
GGSCI (leipeng) 17> start ext1
GGSCI (leipeng) 17> start rep1

GGSCI (leipeng) 17>  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

删除命令:delete ext1

3、数据复制测试

   3.1建立测试表

   @demo_ora_create.sql

   3.2源端执行dml操作

   @demo_ora_insert.sql

   3.3目标端检查数据是否被复制

   源端查询结果:SQL> select count(*) from ggs.tcustmer;

    COUNT(*)
    ----------
         2

   目标端查询结果:

   SQL> select count(*) from ggs.tcustmer;

    COUNT(*)
   ----------
         2

 

    数据被成功的复制

 

  3.4检查GoldenGate状态

     GGSCI (leipeng) 17>  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

  GoldenGate进程运行正常。

3.5日志路径查看:
[oracle@as54x64 dirrpt]$ ls -lt
-rw-rw-rw- 1 oracle dba 3154 03-15 16:04 REP1.rpt
-rw-rw-rw- 1 oracle dba 1940 03-15 16:04 MGR.rpt
-rw-rw-rw- 1 oracle dba 3066 03-15 16:02 EXT1.rpt
[oracle@as54x64 dirrpt]$ pwd
/home/oracle/ggs/dirrpt
 

 

参考:http://blog.sina.com.cn/s/blog_4e7cf89d0100gd87.html

 

遇到问题:

[oracle@as54x64 jyc]$ ./ggsci
./ggsci: error while loading shared libraries: /home/oracle/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
[oracle@as54x64 jyc]$ exit
logout

[oracle@as54x64 ~]$ more /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted
[root@as54x64 ~]# chcon -t texrel_shlib_t
chcon: too few arguments
请尝试执行“chcon --help”来获取更多信息。
[root@as54x64 ~]# chcon -t texrel_shlib_t /home/oracle/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
[root@as54x64 ~]# su - oracle
[oracle@as54x64 ~]$ . .profile
[oracle@as54x64 ~]$ cd jyc
[oracle@as54x64 jyc]$ ls
bcpfmt.tpl            ddl_ora10.sql             demo_more_ora_insert.sql                            libxml2.txt
bcrypt.txt            ddl_ora10upCommon.sql     demo_ora_create.sql                                 logdump
chkpt_ora_create.sql  ddl_ora11.sql             demo_ora_insert.sql                                 marker_remove.sql
cobgen                ddl_ora9.sql              demo_ora_lob_create.sql                             marker_setup.sql
convchk               ddl_oracle.tpl            demo_ora_misc.sql                                   marker_status.sql
db2cntl.tpl           ddl_pin.sql               demo_ora_pk_befores_create.sql                      mgr
ddl_access.tpl        ddl_remove.sql            demo_ora_pk_befores_insert.sql                      notices.txt
ddl_cleartrace.sql    ddl_setup.sql             demo_ora_pk_befores_updates.sql                     params.sql
ddlcob                ddl_sqlmx.tpl             emsclnt                                             replicat
ddl_db2_os390.tpl     ddl_status.sql            extract                                             reverse
ddl_db2.tpl           ddl_staymetadata_off.sql  freeBSD.txt                                         role_setup.sql
ddl_ddl2file.sql      ddl_staymetadata_on.sql   ggMessage.dat                                       server
ddl_disable.sql       ddl_sybase.tpl            ggsci                                               sqlldr.tpl
ddl_enable.sql        ddl_tandem.tpl            ggs_redhatAS40_x64_ora10g_64bit_v10.4.0.19_002.tar  tcperrs
ddlgen                ddl_tracelevel.sql        help.txt                                            UserExitExamples
ddl_informix.tpl      ddl_trace_off.sql         keygen                                              usrdecs.h
ddl_mss.tpl           ddl_trace_on.sql          libicudata.so.38                                    V18157-01-redhat5x64.zip
ddl_mysql.tpl         defgen                    libicui18n.so.38                                    zlib.txt
ddl_nssql.tpl         demo_more_ora_create.sql  libicuuc.so.38
[oracle@as54x64 jyc]$ ./ggsci
./ggsci: error while loading shared libraries: /home/oracle/oracle/product/10.2.0/db_1/lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
[oracle@as54x64 jyc]$ chcon -t texrel_shlib_t /home/oracle/oracle/product/10.2.0/db_1/lib/libnnz10.so

[oracle@as54x64 ~]$ more .profile
#export PS1="`/bin/hostname -s`-> "
export EDITOR=vi
export ORACLE_SID=guaranty
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1
export LD_LIBRARY_PATH=/home/oracle/ggs:$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:/home/oracle/ggs:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
export LANG=en_US
umask 022
[oracle@as54x64 ~]$
[oracle@as54x64 jyc]$ ./ggsci
 

[oracle@as54x64 jyc]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 10.4.0.19 Build 002
Linux, x64, 64bit (optimized), Oracle 10 on Sep 22 2009 14:18:08

Copyright (C) 1995, 2009, Oracle and/or its affiliates.  All rights reserved.

 

GGSCI (as54x64) 1> CREATE SUBDIRS

Creating subdirectories under current directory /home/oracle/jyc

Parameter files                /home/oracle/jyc/dirprm: created
Report files                   /home/oracle/jyc/dirrpt: created
Checkpoint files               /home/oracle/jyc/dirchk: created
Process status files           /home/oracle/jyc/dirpcs: created
SQL script files               /home/oracle/jyc/dirsql: created
Database definitions files     /home/oracle/jyc/dirdef: created
Extract data files             /home/oracle/jyc/dirdat: created
Temporary files                /home/oracle/jyc/dirtmp: created
Veridata files                 /home/oracle/jyc/dirver: created
Veridata Lock files            /home/oracle/jyc/dirver/lock: created
Veridata Out-Of-Sync files     /home/oracle/jyc/dirver/oos: created
Veridata Out-Of-Sync XML files /home/oracle/jyc/dirver/oosxml: created
Veridata Parameter files       /home/oracle/jyc/dirver/params: created
Veridata Report files          /home/oracle/jyc/dirver/report: created
Veridata Status files          /home/oracle/jyc/dirver/status: created
Veridata Trace files           /home/oracle/jyc/dirver/trace: created
Stdout files                   /home/oracle/jyc/dirout: created
 

如何实现把源端3个字段的表中的内容复制到目标端2个字段的表中:

 

 

是数据库登录的密码,登录后运行:

ggsci> add trandata <schema_name>.<table_name>

这里schema_name和table_name就不用解释了,它们是goldengate要同步的所有表,也就是说针对每一张表,都要做一遍,当然你可以采用add trandata <schema_name>.*,或者采用sqlplus中的select from dba_tables 批量生成脚本。

这一步非常关键,如果漏掉,同步时insert,delete可能会没问题,但update肯定报错。

Oracle GoldenGate软件基于数据库日志结构变化,通过解析源端在线日志或归档日志获得数据增量,再将这些变化应用到目标数据库,从而实现源库和目标库的数据同步。下面通过一个简单的示例,详细介绍利用GoldenGate实现Oracle数据库之间的同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值