安装goldengate

 

对于源端数据库,要做以下准备,这里以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创建用户并授权:

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

 

 

 goldengate如何安装和配置_休闲

 

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

 

 goldengate如何安装和配置_休闲_02

 

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

./ggsci

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

 

goldengate如何安装和配置_职场_03

 

至此,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:

 

goldengate如何安装和配置_休闲_04

 

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

 

goldengate如何安装和配置_休闲_05

 

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

 

goldengate如何安装和配置_职场_06

 

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

 

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

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

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

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

 

 goldengate如何安装和配置_goldengate 安装 配置_07

 

goldengate如何安装和配置_职场_08

 

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

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

 

goldengate如何安装和配置_职场_09

 

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

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

 

 goldengate如何安装和配置_休闲_10

 

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

 

goldengate如何安装和配置_职场_11

 

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

 

goldengate如何安装和配置_goldengate 安装 配置_12

 

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

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

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

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

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

 

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

 

goldengate如何安装和配置_goldengate 安装 配置_13

 

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

至此源端goldengate配置完毕。

 

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

 

 goldengate如何安装和配置_休闲_14

 

 

goldengate如何安装和配置_goldengate 安装 配置_15

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

 

goldengate如何安装和配置_goldengate 安装 配置_16

 

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


 

goldengate如何安装和配置_职场_17

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肯定报错。