Oracle Golden Gate 11gR2 单向复制

来源:互联网 发布:grapher软件绘图教学 编辑:程序博客网 时间:2024/03/29 22:38

示例采用GoldenGate典型的配置:

在Source端,配置一个管理进程, 添加一个Extract进程,添加一个本地队列路径,定义一个远端的接收队列路径。
在Target端,配置一个管理进程和添加一个Replicat进程,指定一个应用队列,即抽取进程定义的远端队列。


一.安装GG 软件

1.1 OS 和 DB 版本


2 环境配置

Goldengate 版本

Oracle GoldenGate V11.2.1.0.1 for Oracle 11g on Linux x86-64 (86 MB)

Source:
[root@ol63 ~]# uname -a
Linux ol63 2.6.39-300.28.1.el6uek.x86_64 #1 SMP Tue Feb 5 22:51:31 PST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@ol63 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)

SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

Target:
[root@centos6 ~]# uname -a
Linux centos6 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

[root@centos6 ~]# cat /etc/redhat-release
CentOS release 6.3 (Final)

SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

1.2 安装GG

cd //opt/package
[root@ol63 package]# ls -l ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
-rw-r--r-- 1 root root 89186858 Feb 21 14:59 ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
mkdir ggate
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip -d ggate
su - oracle
mkidr /opt/oracle/ggate
cd /opt/package/ggate
tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /opt/oracle/ggate

1.3 添加环境变量

在/home/oracle/.bash_profile文件里添加如下内容:

PATH=${ORACLE_HOME}/bin:/opt/oracle/ggate:$PATH; export PATH
LD_LIBRARY_PATH=/opt/oracle/ggate:${ORACLE_HOME}/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
GGATE=/opt/oracle/ggate; export GGATE
NLS_LANG="AMERICAN_AMERICA.AL32UTF8" export NLS_LANG

注意我这里的GG 和Oracle 使用的是相同的用户,所以把GG 的变量加上就可以了。加载刚刚设置的环境变量:
source  /home/oracle/.bash_profile


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

cd /opt/oracle/ggate
ggsci
--使用ggsci 工具创建目录
GGSCI (ol63) 1>create subdirs
以上就是GG 的安装,在source 和target database 都执行。

二.配置Source database

GoldenGate通过抓取源端数据库重做日志进行分析,将获取的数据应用到目标端,实现数据同步。因此,源数据库需要必须处于归档模式,并启用附加日志和强制日志。

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

--查看

SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;

LOG_MODE     SUPPLEME FOR
------------ -------- ---
NOARCHIVELOG   NO      NO

--修改

(1)archivelog

SQL>shutdown immediate

SQL>startup mount

SQL>alter database archivelog;

SQL>alter database open;

(2) force logging

SQL>alterdatabase force logging;

(3)supplemental log data

SQL>alterdatabase add supplemental log data;


2.2 Oracle 9i的_LOG_PARALLELISM参数

如果是Oracle 9i的数据库,还需要将_LOG_PARALLELISM 参数设置为1. 因为GG 不支持该值超过1.

If using OracleGoldenGate for an Oracle 9i source database, set the _LOG_PARALLELISMparameter to 1. Oracle GoldenGate does not support values higher than 1.


2.3 启用DDL 支持

       GG虽然支持DDL,但是也是有限制的,具体参考:

Oracle Gloden Gate 系列三 --GG 支持与不支持的对象类型与操作 说明

http://blog.csdn.net/tianlesoftware/article/details/6933969

 

GG 支持DDL 也是通过创建一些table 来保存这些DDL 的信息,关于这些table 的具体说明,在如下链接的第二小节:启用GG 对DDL 操作的支持有详细说明:

Oracle Golden Gate 系列四 --GG 安装 与 卸载 理论知识

http://blog.csdn.net/tianlesoftware/article/details/6937183

 

对于这些存放DDL 信息表的管理的理论支持,参考如下链接的第四小结:Managing theOracle DDL replication environment。

Oracle Golden Gate 系列五 --GG 使用配置 说明

http://blog.csdn.net/tianlesoftware/article/details/6947973

 

这块的测试内容会另篇Blog进行测试。


2.3.1 禁用Recycle Bin

如果启用DDL 支持,必须关闭recycle bin。官网的解释如下:

If the recyclebin is enabled, the Oracle GoldenGate DDL trigger session receives implicitrecycle bin DDL operations that cause the trigger to fail.

 

Oracle 11g:

SQL> alter system set recyclebin=off scope=spfile;

System altered.


如果数据库是10g,需要关闭recyclebin并重启;或者手工purge recyclebin。


2.3.2 创建存放DDL 信息的user并赋权

SQL> create user ggate identified by ggate default tablespace users temporary tablespace temp;

User created.

SQL> grant connect,resource to ggate;

Grant succeeded.

SQL> grant execute on utl_file to ggate;

Grant succeeded.


退出所有使用Oracle 的session,然后使用SYSDBA权限的用户执行如下脚本

--进入GG的目录,然后调用脚本:
cd $GGATE
sqlplus / as sysdba

--脚本1:

SQL> @marker_setup.sql;

--输入我们之前创建的用户名:

Enter GoldenGate schema name:ggate

--脚本2:

SQL> @ddl_setup.sql;

--提示输入GG的用户:

Enter GoldenGate schema name:ggate

--脚本3:

SQL> @role_setup.sql;

--同样输入GG用户名:

Enter GoldenGate schema name:ggate

--脚本4:赋权

SQL> grant GGS_GGSUSER_ROLE to ggate;

--脚本5:

SQL> @ddl_enable.sql;


注意这里脚本创建的table都是使用默认的名称,当然也可以修改这些table的默认名,具体这块参考之前的文档中的说明


Target Database 做如上相同的配置。

三.测试GG

经过第一和第二节的配置,GG 的配置基本完成,这里我们开始测试GG。

注意:

(1)    目标库的用户名和对象名称可以与源端不同,关键在于配置文件中要能够正确匹配。

(2)    配置源和目标两端tnsnames,保持互联互通。

 

3.1 在Source 和 Target database上创建测试用户

--source database

SQL> create user sender identified by oracle default tablespace users temporary tablespace temp;

User created.

SQL> grant connect,resource,dba to sender;

Grant succeeded. 

 

--target database

SQL> create user receiver identified byoracle default tablespace users temporary tablespace temp;

User created.

SQL> grant connect,resource,dba to receiver;

Grant succeeded.


3.2 在Source 和Target 上配置Manager

cd $GGATE
[oracle@ol63 ggate]$ ggsci


Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14


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





GGSCI (ol63) 1> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    STOPPED  


GGSCI (ol63) 1>edit params mgr

PORT 7809

--这里我们指定了端口,然后:wq 保存退出。

GGSCI (ol63) 3> start manager

Manager started.

以上是在Source 库上执行的,在Target 库上执行同样的操作。

3.3 配置SourceDB 的复制队列

 

3.3.1 先连接到数据库,测试连接:

GGSCI (ol63) 4> dblogin userid ggate, password ggate
Successfully logged into database.

3.3.2 增加一个抽取:

GGSCI (ol63) 11> add extract ext1,tranlog, begin now

2013-01-08 20:36:47  INFO   OGG-01749  Successfully registeredEXTRACT EXT1 to start managing log retention at SCN 1121060.

EXTRACT added.


GGSCI (gg1) 12> add exttrail /u01/ggate/dirdat/lt, extract ext1

EXTTRAIL added


修改抽取进程ext1参数:

GGSCI (ol63) 13> edit params ext1

extract ext1

SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

userid ggate, password ggate

rmthost centos6, mgrport 7809

rmttrail /opt/oracle/ggate/dirdat/lt

ddl include mapped objname sender.*;

table sender.*;


GGSCI (ol63) 14> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                           

EXTRACT    STOPPED     EXT1        00:00:00      00:03:26  


3.4  配置TargetDB 同步队列

 3.4.1 在Target 端添加checkpoint表:

GGSCI (centos6) 6> edit params ./GLOBAL

GGSCHEMA ggate

CHECKPOINTTABLE ggate.checkpoint

添加如上2条记录。

 

GGSCI (centos6) 12> dblogin userid ggate,password ggate

Successfully logged into database.

--说明,这个用户是在Source 库启用DDL 创建的,我在Target 库也创建了这个用户。

GGSCI (centos6) 13> add checkpointtable ggate.checkpoint

Successfully created checkpoint tableGGATE.CHECKPOINT.


3.4.2 创建同步队列

GGSCI (centos6) 14> add replicat rep1,exttrail /opt/oracle/ggate/dirdat/lt, checkpointtable ggate.checkpoint

REPLICAT added.

 

GGSCI (centos6) 15> edit params rep1

replicat rep1

SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

ASSUMETARGETDEFS

userid ggate,password ggate

discardfile /opt/oracle/ggate/dirdat/rep1_discard.txt,append, megabytes 10

DDL

map sender.*, target receiver.*;

添加如上内容。

 

3.5开启同步

3.5.1 Source DB:

GGSCI (ol63) 15> start extract ext1

Sending START request to MANAGER ...

EXTRACT EXT1 starting

 

GGSCI (ol63) 16> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

EXTRACT    STOPPED     EXT1        00:00:00      00:14:16  


GGSCI (gg1) 17> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

EXTRACT    RUNNING     EXT1        00:14:26      00:00:02 

 

3.5.2 Target DB

GGSCI (gg2) 16> start replicat rep1

Sending START request to MANAGER ...

REPLICAT REP1 starting

 

GGSCI (gg2) 17> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

REPLICAT   RUNNING     REP1        00:00:00      00:00:04  


3.6 测试Data 复制

我们在Source DB上的sender 用户下创建一张表,然后看这张表是否同步到了Target DB的receiver用户下。

 

--Source DB:

SQL> conn sender/oracle;

Connected.

SQL>create table test(id int primary key, name varchar2(50));

Table created.

 

--Target DB:

SQL> conn receiver/oracle;

Connected.

SQL>select * from tab;


TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
TEST                           TABLE

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(38)
 NAME                                               VARCHAR2(50)

现在我们在Source DB上在插入一些记录,在验证下GG的同步情况:
SQL> begin
for i in 1 .. 100
loop
insert into test values(i, 'test' || i);
end loop;
end;
/
PL/SQL procedure successfully completed.
SQL> select * from test
        97 test97
        98 test98
        99 test99


        ID NAME
---------- --------------------------------------------------
       100 test100


100 rows selected.

SQL>commit;

在Target DB 验证:
        ID NAME
---------- --------------------------------------------------
        89 test89
        90 test90
        91 test91
        92 test92
        93 test93
        94 test94
        95 test95
        96 test96
        97 test97
        98 test98
        99 test99


        ID NAME
---------- --------------------------------------------------
       100 test100


100 rows selected.

同步正常,以上就是Oracle to Oracle 下的一个GG 单向复制示例。有关GG的更多内容会继续测试。
原创粉丝点击