Oracle GoldenGate 单向复制环境搭建

Oracle GoldenGate 单向复制环境搭建

配置环境:

建议在相同版本OGG(即Oracle GoldenGate)之间进行复制。

一、准备OGG的运行用户

在这里,我直接使用oracle用户作为OGG的运行用户。

二、确认OGG的安装目录

在源端,即Linux环境下,我选择/u01/app/goldengate作为OGG的安装目录,注意:/u01/app/goldengate目录的属主必须为OGG的运行用户,在这里,该目录的属主必须为oracle。

在目标端,将/u01/app/goldengate作为OGG的安装目录

三、打开数据库的归档模式

SQL> archive log list

Databaselog mode              No Archive Mode

Automatic archival             Disabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     5

Currentlog sequence           7

SQL>shutdown immediate

SQL> startup mount

SQL>alterdatabase archivelog;

SQL>alterdatabaseopen;

 

 

四、打开源端数据库最小附加日志

因为这里搭建的只是单向复制,OGG捕捉的是源端数据库的更改,所以只需对源端数据库开启最小附加日志

SQL>selectsupplemental_log_data_min from v$database;

SUPPLEME

--------

NO

SQL>alterdatabaseadd supplemental log data;

Database altered.

 

SQL>alter system switchlogfile;   --切换日志使附加日志生效

System altered.

 

五、在数据库中建立OGG用户并赋予响应的权限

为了简化授权,直接将dba角色赋予给gg用户。

SQL>createuser gg identified by oracle;

SQL>grant dba to gg;

 

六、上传软件包到指定目录,进行安装

在源端:

[oracle@whdata ~]$ cd /u01/app/goldengate/

[oracle@whdata goldengate]$ ls

ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip

[oracle@whdata goldengate]$ unzip OracleGoldenGate V12.1.2.1.0 for Oracle 11g on Linux x86-64.zip

[oracle@whdata Disk1]$ ./runInstaller

在当前目录下,执行ggsci命令

[oracle@whdata goldengate]$ ./ggsci

./ggsci: error while loading sharedlibraries: libnnz11.so: cannot open shared object file: No such fileor directory

报以上错误,在/home/oracle/.bash_profile添加如下内容:exportLD_LIBRARY_PATH=$ORACLE_HOME/lib,添加完毕后,记得使配置文件生效:source /home/oracle/.bash_profile。

注意:为了ggsci命令在任何目录下可以执行,可在/home/oracle/.bash_profile设置如下环境变量:

exportGG_HOME=/u01/app/goldengate
export PATH=$GG_HOME:$PATH

重新执行ggsci命令

表示进入成功

在ggsci环境下创建GoldenGate子目录

[oracle@whdata goldengate]$ ggsci

GGSCI (whdata as gg@PROD1) 1>create subdirs

Creating subdirectories under current directory /u01/app/goldengate

Parameter files                /u01/app/goldengate/dirprm: already exists

Report files                   /u01/app/goldengate/dirrpt: created

Checkpoint files               /u01/app/goldengate/dirchk: created

Process status files           /u01/app/goldengate/dirpcs: created

SQL script files               /u01/app/goldengate/dirsql: created

Database definitionsfiles     /u01/app/goldengate/dirdef: created

Extract data files             /u01/app/goldengate/dirdat: created

Temporary files                /u01/app/goldengate/dirtmp: created

Stdout files                   /u01/app/goldengate/dirout: created

在目标端安装goldengate同源端,过程略。

安装完毕后,会启动一个mgr进程的窗口。

同样需要在目标端ggsci环境下创建GoldenGate子目录,因该OGG安装完毕后,以上目录均已自动创建,故不再创建。

 

七、配置Manager进程

在ggsci环境下配置Manager进程

源端配置如下:

[oracle@whdata goldengate]$ ggsci

GGSCI (whdata as gg@PROD1) 1> edit param mgr

GGSCI (whdata as gg@PROD1) 2> start mgr

Manager started.

GGSCI (whdata as gg@PROD1) 3> info all

Program    Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING         --可见MGR进程已启动

目标端同样如此。

 

八、在源端上添加表级附加日志

为了验证搭建的效果,因为原来库有SCOTT用户,我们只需要新建一张test表。

SQL>createtable test (id number);

Table created.

在ggsci命令行中登录数据库,为所有需要复制的表添加trandata 

GGSCI (whdata as gg@PROD1) 1> dblogin useridgg,password oracle

Successfully logged intodatabase.

GGSCI (whdata as gg@PROD1) 2>add trandata scott.*

WARNING OGG-00869  No uniquekeyis defined fortable'TEST'. All viable columnswill be used to represent the key, but may not guaranteeuniqueness.  KEYCOLS may be used to define the key.

 

Logging of supplemental redodata enabled fortable SCOTT.TEST

从上面的WARNING我们可以看出,因为test表没有唯一性约束,故OGG将该行的所有列来作为它的唯一性约束。

 

九、在源端上添加Extract进程

GGSCI (whdata as gg@PROD1) 5>add ext exta,tranlog,begin now

其中,exta为进程名,一般为ext开头表示是extract进程,后面可以加1-2位字符标识;

        tranlog表示要抽取数据库日志;

        begin now表示从当前时间点开始抽取

注意:添加完Extract进程后,我们有两种方式来传输数据。

第一种,exta进程直接将捕捉到的有效数据写入到远程队列,网络拓扑如下:

 

不难看出,该方式对网络要求较高,在实际生产环境中很少使用该种方式。

第二种,首先将数据抽取到本地,然后再由Pump进程传输到远程队列。网络拓扑如下:

在这里,我们采用第二种方式

 

十、在源端上配置Pump进程

创建完exta进程后,使用本地队列时为exta进程配置队列如下:

GGSCI (whdata as gg@PROD1) 1>add exttrail /u01/app/goldengate/dirdat/la,extexta,megabytes 20

megabytes表示每个队列文件的大小,超过该大小则会滚动写入到下一个队列文件。

此时exta复制到了本地,下面来配置Pump进程,负责将数据原封不动的搬运到目标端。

GGSCI (whdata as gg@PROD1) 3>add extractdpea,exttrailsource /u01/app/goldengate/dirdat/la

此时exttrailsource指定的是本地队列的路径

为该Pump进程配置远程队列

GGSCI (whdata as gg@PROD1) 4>add rmttrail /u01/app/goldengate/dirdat/ra,extdpea,megabytes 20

rmttrail为目标队列的位置,队列一般由路径加上两个标识如ra来表示。

 

十一、在源端配置Extract进程参数

GGSCI (whdata as gg@PROD1) 6> edit param exta

内容如下:

EXTRACT exta

setenv ( NLS_LANG =AMERICAN_AMERICA.AL32UTF8 )

setenv ( ORACLE_SID = PROD1 )

USERID gg, PASSWORD oracle

EXTTRAIL /u01/app/goldengate/dirdat/la

dynamicresolution

table scott.*;

启动exta进程,看其能否正常启动

GGSCI (whdata as gg@PROD1) 15> start exta

Sending START request to MANAGER ...

EXTRACT EXTA starting

GGSCI (whdata as gg@PROD1) 17> info all

Program    Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING                                          

EXTRACT    STOPPED     DPEA        00:00:00      00:27:12   

EXTRACT    RUNNING     EXTA        00:55:27      00:00:07 

注意:正常情况下,exta进程启动后的status是running,如果依旧是stopped,可通过view report exta查看exta启动异常的原因。

PS:第一次配置后,启动异常,后来通过view report exta命令查看其报错信息:ERROR   OGG-00396  Command not terminated by semi-colon,才知道table scott.*参数后没有加分号。添加完毕后,重新启动,启动正常。

 

十二、在源端配置Pump进程参数

GGSCI (whdata as gg@PROD1) 19> edit param dpea

内容如下:

extract dpea

setenv ( NLS_LANG =AMERICAN_AMERICA.AL32UTF8 )

passthru

rmthost 192.168.0.121,mgrport 7809, compress

rmttrail /u01/app/goldengate/dirdat/ra

dynamicresolution

table scott.*;

其中rmthost指定目标端的主机IP和端口,rmttrail指定远程队列的路径,passthru表示本进程是一个Pump进程,不需要跟数据库交互。

启动查看状态

GGSCI (whdata as gg@PROD1) 20> start dpea

Sending START request to MANAGER ...

EXTRACT DPEA starting

GGSCI (whdata as gg@PROD1) 21> info all

Program    Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING                                           

EXTRACT    RUNNING     DPEA        00:00:00      00:42:42   

EXTRACT    RUNNING     EXTA        00:00:00      00:00:04

启动OK。

 

十三、在目标端上初始化目标表

可以通过exp/imp、RMAN、initload进行数据初始化

如果目标端不需要历史数据,可以只建立表结构

在这里,同源端一样,在目标端新建一个SCOTT用户,并新建一张test表。

 

十四、在目标端添加Replicat进程

GGSCI (whdata) 5>add rep repa,exttrail/u01/app/goldengate/dirdat/ra,nodbcheckpoint

REPLICAT added.

 

十五、配置Replicat进程参数

GGSCI (whdata) 7> edit param repa

内容如下:

replicat repa

setenv (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK)

setenv (ORACLE_SID = test)

userid gg, password gg

reperror default,abend

discardfile /u01/app/goldengate/dirrpt/repa.dsc,append,megabytes 10

assumetargetdefs

dynamicresolution

map scott.*, target scott.*;

启动Replicat进程

GGSCI (whdata) 25> start repa

Sending START request to MANAGER ...

REPLICAT REPA starting

GGSCI (whdata) 26> info all 

Program    Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING

REPLICAT   ABENDED     REPA        00:00:00      01:45:47  

发现REPA进程的状态是ABENDED,通过view report exta命令查看其报错信息:

2018-04-05 00:37:00  ERROR  OGG-02091  Operation not supportedbe

cause enable_goldengate_replication is notset to true.

在目标数据库中将enable_goldengate_replication的值设为true

SQL>alter system setenable_goldengate_replication=true;

系统已更改。

重新启动Replicat进程,状态OK

GGSCI (whdata) 29> info all

Program    Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING

REPLICAT   RUNNING     REPA        00:00:00      00:00:08

至此,各进程均已正常启动,下面,通过对源端test表进行增删改,看其目标端的变化

源端新增一条数据

SQL>insertinto test values(1);

1 row created.

SQL>commit;

Commit complete.

目标端的结果如下:

SQL>select*from test;

       ID

----------

        1

对源端进行删、改,变化同样发生在目标端中。

也可通过查看各进程的状态来查看复制的情况

至此,基于GoldenGate的单向复制环境搭建完毕。

 


猜你喜欢

转载自blog.csdn.net/dbdeep/article/details/79823673
今日推荐