您的位置:首页 > 数据库 > Oracle

Oracle Golden Gate 11gR2 单向复制

2013-02-24 14:58 393 查看
示例采用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 支持与不支持的对象类型与操作 说明

/article/1448855.html

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

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

/article/1448853.html

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

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

/article/1448851.html

这块的测试内容会另篇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的更多内容会继续测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: