一、     什么是goldgate

GoldenGate是业内成熟的数据容灾与复制产品

 

GoldenGate软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步。

 

 

 

二、     Goldgate结构

GoldenGate主要包含Manager进程、Extract进程、Pump进程、Replicat进程,

 

Manager进程是GoldenGate的控制进程,它主要作用有以下几个方面:启动、监控、重启GoldenGate的其他进程,报告错误及时间,分配数据存储空间,发布阀值报告等。

 

Extract进程运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期性地检查 并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,我们重启Extract进程 后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。

 

Pump进程运行在数据库源端,其作用非常简单。如果源端使用了本地trail文件,那么Pump进程就会把Trail文件以数据块的形式通过 TCP/IP协议发送到目标端,我们下面的配置都是这种方式。Pump进程本质是Extract进程的一种特殊形式,如果不使用Trail文件,那么 Extract进程在抽取完数据后,直接投递到目标端。

 

Pump进程相对应的叫Server Collector进程,这个进程不需要引起我们关注,因为在实际操作过程中无需对其进行任何配置,它运行在目标端,任务就是把Extract/Pump进程投递过来的数据块重新组装成Trail文件。

 

Replicat进程运行在目标端,是数据投递的最后一站,负责读取目标端Trail文件中的内容,并将解析其解析为DMLDDL语句,然后应用到目标数据库中。

 

三、     本案例说明

进行的是一对一复制,且只是复制部分表数据,所以这里仅探讨一对一复制的安装配置,而且对于DDL复制的支持这里也不做研究

 

 

四、     环境准备

环境说明

IP

平台

Oracle版本

源端

192.168.205.200

RHEL6.4

11.2.0.4

目标端

192.168.205.201

RHEL6.4

11.2.0.4

 

启用归档模式

 

 

五、     准备要复制的对象

在源库和目标库上都创建对象

create tablespace TEST datafile '/u01/oracle/oradata/test.dbf' size 1024m autoextend on next 50m maxsize unlimited; 

create user user01 identified by user01 default tablespace TEST temporary tablespace temp;

grant connect,resource,dba to user01;

 

SQL> conn user01/user01;

 

create table t(id Number(10) NOT NULL PRIMARY KEY,tt timestamp(6));    //建表(要复制的对象)

 

CREATE SEQUENCE t_sequence INCREMENT BY 1 START WITH 1  NOMAXVALUE  NOCYCLE NOCACHE     //创建序列

 

六、     源端安装goldgate

# unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip

# tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

# chown -R oracle:oinstall /opt/ogg

# chmod -R 775 /opt/ogg

 

$ export  LD_LIBRARY_PATH=$ORACLE_HOME/lib

[oracle@oracle1 ~]$ cd /opt/ogg

[oracle@oracle1 ogg]$ ./ggsci               //进入OGG控制台

 

 

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.

 

 

//执行命令 createsubdirs创建工作目录

GGSCI (oracle1) 1> create subdirs

 

Creating subdirectories under current directory /opt/ogg

 

Parameter files                /opt/ogg/dirprm: already exists

Report files                   /opt/ogg/dirrpt: created

Checkpoint files               /opt/ogg/dirchk: created

Process status files           /opt/ogg/dirpcs: created

SQL script files               /opt/ogg/dirsql: created

Database definitions files     /opt/ogg/dirdef: created

Extract data files             /opt/ogg/dirdat: created

Temporary files                /opt/ogg/dirtmp: created

Stdout files                   /opt/ogg/dirout: created

 

 

七、     目标端安装GoldenGate

 

建立OGG安装目录,然后将压缩包解压到目录中,进入cmd控制台,创建工作目录,

 

步骤和源端一样

 

 

 

八、     配置源端数据库

1)        数据库启用归档模式

 

2)        开启最小附加日志

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;  //查询是否开启最小附加日志

 

SUPPLEME

--------

NO

 

 

SQL> alter database add supplemental log data;

 

Database altered.

 

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

 

SUPPLEME

--------

YES

 

 

3)        创建goldengate用户并授权

create user ogg identified by oracle default tablespace USERS;

grant connect,resource,unlimited tablespace to ogg;

GRANT EXECUTE ON   UTL_FILE TO ogg;

grant select any dictionary,select any table to ogg;

grant alter any table to ogg;

grant flashback any table to ogg;

grant execute on DBMS_FLASHBACK to ogg;

 

 

4)        添加表级transdata

 

GGSCI (NDSCDB1) 2>dblogin userid ogg,password oracle

Successfully logged intodatabase.

 

GGSCI (oracle1) 3> add trandata user01.*

 

Logging of supplemental redo data enabled for table USER01.T.

九、     配置源端进程组

1)        配置管理进程mgr

GGSCI (oracle1) 5> edit param mgr   //添加以下内容

 

PORT 7839

 

DYNAMICPORTLIST 7840-7939

 

--AUTOSTART ER *

 

AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3

 

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

 

LAGREPORTHOURS 1

 

LAGINFOMINUTES 30

 

LAGCRITICALMINUTES 45

MANAGER进程参数配置说明:

 

PORT:指定服务监听端口;这里以7839为例,默认端口为7809

 

DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的CollectorReplicatGGSCI进程通信也会使用这些端口;

 

COMMENT:注释行,也可以用--来代替;

 

AUTOSTART:指定在管理进程启动时自动启动哪些进程;

 

AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;

 

PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。

 

LAGREPORTLAGINFOLAGCRITICAL

 

定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。

 

 

2)        启动管理进程

GGSCI (oracle1) 9> start mgr

 

Manager started.

 

3)        查看mgr

GGSCI (oracle1) 26> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING 

 

 

 

4)        配置Extract抽取进程组

 

GGSCI (oracle1) 27> add extract extnd,tranlog,begin now

EXTRACT added.

 

GGSCI (oracle1) 29> add exttrail /opt/ogg/dirdat/nd,extract extnd,megabytes 100

EXTTRAIL added.

Megabytes:指定队列大小,本处设置表示100M

 

 

GGSCI (oracle1) 30> edit params extnd

EXTRACT extnd

 

setenv(NLS_LANG = "AMERICAN_AMERICA.UTF8")

 

SETENV(ORACLE_HOME = "/u01/oracle/11.2.0/db_1")

 

SETENV(ORACLE_SID = "sdzy")

 

USERID ogg, PASSWORD oracle

 

--GETTRUNCATES

 

REPORTCOUNT EVERY 1 MINUTES, RATE

 

DISCARDFILE /opt/ogg/dirrpt/extnd.dsc,APPEND,MEGABYTES 1024

 

--THREADOPTIONS  MAXCOMMITPROPAGATIONDELAY 60000 IOLATENS60000

 

DBOPTIONS  ALLOWUNUSEDCOLUMN

 

WARNLONGTRANS 2h,CHECKINTERVAL 3m

 

EXTTRAIL /opt/ogg/dirdat/nd

 

--TRANLOGOPTIONSEXCLUDEUSER USERNAME

 

FETCHOPTIONS NOUSESNAPSHOT

 

TRANLOGOPTIONS  CONVERTUCS2CLOBS

 

TABLE user01.*;

 

5)        添加传输进程

GGSCI (oracle1) 32> add extract dpend,exttrailsource /opt/ogg/dirdat/nd

EXTRACT added.

 

GGSCI (oracle1) 33> add rmttrail /opt/ogg/dirdat/nd,extract dpend

RMTTRAIL added.   //添加目标端的传输目标路径

 

 

配置参数

GGSCI (oracle1) 34> edit params dpend   //dpend作为投递进程组

EXTRACT dpend

 

SETENV(NLS_LANG = "AMERICAN_AMERICA.UTF8")

 

USERID ogg, PASSWORD oracle

 

PASSTHRU

 

RMTHOST 192.168.205.201, MGRPORT 7839, compress  //目标端

 

RMTTRAIL /opt/ogg/dirdat/nd   //目标端

 

TABLE user01.*;

 

抽取进程和传输进程其实都是EXTRACT进程,也可以配置在一个进程完成这两个功能,但是当网络传输有问题时,这样抽取也就不能继续运行了,所以推荐分开配置为两个进程;

 

EXTRACT进程参数配置说明:

 

SETENV:配置系统环境变量

 

USERID/ PASSWORD:指定OGG连接数据库的用户名和密码,这里使用3.4部分中创建的数据库用户OGG;

 

COMMENT:注释行,也可以用--来代替;

 

TABLE:定义需复制的表,后面需以;结尾

 

TABLEEXCLUDE:定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉得表。

 

GETUPDATEAFTERS|IGNOREUPDATEAFTERS

 

是否在队列中写入后影像,缺省复制

 

GETUPDATEBEFORES| IGNOREUPDATEBEFORES

 

是否在队列中写入前影像,缺省不复制

 

GETUPDATES|IGNOREUPDATES

 

是否复制UPDATE操作,缺省复制

 

GETDELETES|IGNOREDELETES

 

是否复制DELETE操作,缺省复制

 

GETINSERTS|IGNOREINSERTS

 

是否复制INSERT操作,缺省复制

 

GETTRUNCATES|IGNORETRUNDATES

 

是否复制TRUNCATE操作,缺省不复制;

 

RMTHOST:指定目标系统及其GoldengateManager进程的端口号,还用于定义是否使用压缩进行传输,本例中的compress为压缩传输;

 

RMTTRAIL:指定写入到目标断的哪个队列;

 

EXTTRAIL:指定写入到本地的哪个队列;

 

SQLEXEC:在extract进程运行时首先运行一个SQL语句;

 

PASSTHRU:禁止extract进程与数据库交互,适用于Data Pump传输进程;

 

REPORT:定义自动定时报告;

 

STATOPTIONS:定义每次使用stat时统计数字是否需要重置;

 

REPORTCOUNT:报告已经处理的记录条数统计数字;

 

TLTRACE:打开对于数据库日志的跟踪日志;

 

DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;

 

DBOPTIONS:指定对于某种特定数据库所需要的特殊参数;

 

TRANLOGOPTIONS:指定在解析数据库日志时所需要的特殊参数,例如:对于裸设备,可能需要加入以下参数 rawdeviceoggset 0

 

WARNLONGTRANS:指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔3分钟检查一次场交易,对于超过2小时的进行警告;

 

 

十、     目标数据库配置

1)        创建goldgate用户并授权

create user ogg identified by oracle default tablespace users;

grant connect,resource,unlimited tablespace to ogg;

grant execute on utl_file to ogg;

grant select any dictionary,select any table to ogg;

grant alter any table to ogg;

grant flashback any table to ogg;

grant execute on DBMS_FLASHBACK to ogg;

grant insert any table to ogg;

grant delete any table to ogg;

grant update any table to ogg;

grant alter session to ogg;

grant select any dictionary to ogg;

 

2)        编辑checkpoint表参数

GGSCI (oracle2) 3> edit params ./GLOBALS

CHECKPOINTTABLE ogg.GGS_checkpoint

 

3)        添加checkpoint

GGSCI (oracle2) 5> dblogin userid ogg,password oracle

Successfully logged into database.

 

GGSCI (oracle2) 6> add checkpointtable ogg.checkpoint

 

Successfully created checkpoint table ogg.checkpoint.

 

 

十一、       配置目标端进程组

1)        配置mgr参数

GGSCI (oracle2) 7> edit params mgr

PORT 7839

DYNAMICPORTLIST 7840-7939

--AUTOSTARTER *

AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3

PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45

 

 

2)        配置复制队列

GGSCI (oracle2) 8> add replicat repnd,exttrail /opt/ogg/dirdat/nd,checkpointtable ogg.checkpoint

REPLICAT added.

 

GGSCI (oracle2) 9> edit params repnd

REPLICAT repnd

SETENV(NLS_LANG = AMERICAN_AMERICA.UTF8)

USERID ogg, PASSWORD oracle

ASSUMETARGETDEFS

REPERROR default,discard

discardfile /opt/ogg/dirrpt/repnd.dsc,append,megabytes 50

dynamicresolution

map user01.*,TARGET user01.*;

3)        启动mgr进程组

GGSCI (oracle2) 14> start mgr

 

Manager started.

十二、       源端和目标端分别启动进程组

1)        源端启动进程组

GGSCI (oracle1) 62> start extnd

 

Sending START request to MANAGER ...

EXTRACT EXTND starting

 

GGSCI (oracle1) 62> start depend

 

Sending START request to MANAGER ...

EXTRACT EXTND starting

 

 

GGSCI (oracle1) 63> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

EXTRACT     RUNNING     DPEND       00:00:00      00:00:03   

EXTRACT     RUNNING     EXTND       00:56:41      00:00:00   

 

 

 

2)        目标端启动进程组

GGSCI (oracle2) 17> start repnd

 

Sending START request to MANAGER ...

REPLICAT REPND starting

 

 

GGSCI (oracle2) 18> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

REPLICAT    RUNNING     REPND       00:00:00      00:00:00   

 

 

十三、       数据同步测试

1)        源和目标库都使用user01用户创建测试表

Conn user01/user01

CREATE TABLE Persons (Id_P int NOT NULL UNIQUE,Name varchar(255) NOT NULL)

 

2)        源库插入数据,执行commit

SQL> insert into Persons values ('5','eee');

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

3)        目标库查询

SQL> select * from Persons;

 

      ID_P

----------

NAME

--------------------------------------------------------------------------------

       5

Eee

 

有记录

 

 

十四、       FAQ

1)        如何查看goldgate日志

# tail -f /opt/ogg/ggserr.log

 

2)        OGG复制进程挂起abended处理

一个能正常复制的ogg进程突然挂起的的情况,一般会有以下几种情况:

 

1、在数据库复制没开启DDL复制情况下:如果在建设阶段,数据的初始化没有做好(做部署的时候应用或者数据库进程没有停止),当生产端数据表结构发生变化(即有ddl操作)时候,数据库复制的进程会出现abended的状态。

 

2、另一种是第一种的衍生,如果有临时表产生也会导致复制进程中断。记录下解决过程,

 

#查看原因:

 

首先当出现进程abended时候,观察ggserr.log会发现 OGG-01296:error mapping from table_name to table_name

 

需要将该表排除(修改复制进程只是一种临时解决办法,最好需要重新初始化)

 

#su - oracle(确定用户是否是oracle

 

$cd /goldengate

 

$./ggsci ALTER GGSCI (None) 9>info all

 

#解决方法,修改复制进程参数文件,以repxa为例:

 

ALTER GGSCI (None) 9>edit params repxa) 然后将这个表名添加到复制进程的参数文件中:mapexclude table_name,然后保存,退出。

 

#改完复制进程后,重启复制进程:

 

repxa为例:

 

ALTER GGSCI (None) 9>kill repxa

 

ALTER GGSCI (None) 9>alter repxa,begin now

 

ALTER GGSCI (None) 9>start repxa

 

 

3)        如何启停goldgate

 

l  启动

源:

Start mgr

Start extnd

Start dpend

 

GGSCI (oracle1) 4> info all 

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING                                          

EXTRACT     STOPPED     DPEND       00:00:00      00:12:29   

EXTRACT     STOPPED     EXTND       00:00:00      00:12:29   

 

目标:

Start mgr

start repnd

      

 

l  关闭流程:

1)        关闭目标:

 

GGSCI (oracle2) 56> stop r*

 

Sending STOP request to REPLICAT REPND ...

Request processed.

 

 

GGSCI (oracle2) 57> stop mgr

Manager process is required by other GGS processes.

Are you sure you want to stop it (y/n)? y

 

Sending STOP request to MANAGER ...

Request processed.

Manager stopped.

 

 

GGSCI (oracle2) 58> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     STOPPED                                          

REPLICAT    STOPPED     REPND       00:00:00      00:00:11   

 

2)        关闭源

GGSCI (oracle1) 18> stop extnd

 

Sending STOP request to EXTRACT EXTND ...

Request processed.

 

 

GGSCI (oracle1) 19> stop dpend

 

Sending STOP request to EXTRACT DPEND ...

Request processed.

 

 

GGSCI (oracle1) 20> stop mgr

Manager process is required by other GGS processes.

Are you sure you want to stop it (y/n)? y

 

Sending STOP request to MANAGER ...

Request processed.

Manager stopped.

 

 

GGSCI (oracle1) 21> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     STOPPED                                          

EXTRACT     STOPPED     DPEND       00:00:00      00:00:08   

EXTRACT     STOPPED     EXTND       00:00:00      00:00:12