GoldenGate4EDC-Guide

概述


GoldenGate简介

GoldenGate是Oracle公司的一款数据库中间件,它基于数据库的二进制日志以及事务提交,实现了数据库集群之间的数据迁移,主要用于数据库之间的同步和备份。

GoldenGate在组件中的作用

我们用GoldenGate来实现了对数据库数据修改的采集,以及将这些变化在远端输出为可供程序读取的文本文件。

结构简介

GoldenGate分为两端

源端作为数据源,负责从数据库采集数据,生成Trails文件,并发送到目标端;

目标端作为终点,负责处理从源端传来的Trails文件,并将这些文件转换为文本文件;

结构如图:


GoldenGate4EDC-Guide_第1张图片
Oracle Golden Gate结构图


源端

源端上装有Oracle和GoldenGate,GoldenGate将Oracle的数据采集并以事务为单位,写入本地Trails文件,并在远程的GoldenGate上生成新的Trails文件(目前只有DML操作)。相关组件如下:

manager

GoldenGate的监控进程,负责控制GoldenGate的其他组件

extract

从数据库的二进制日志中抽取变化到Trails文件

pump

从源端的Trails文件里抽取信息并推送到目标端的Trails文件

目标端

目标端上的GoldenGate将源端输送过来的GoldenGate文件以特定的规则,转换为特定格式的文本文件。相关组件如下:

manager

GoldenGate的监控进程,负责控制GoldenGate的其他组件

ffwriter

将本地的Trails文件读取并转换为文本文件

内部组件

ggsci

GoldenGate的控制台,可以通过这个操作GoldenGate的附属组件

defgen

用于生成srcdef文件,供目标端的GoldenGate使用

logdump

用来解析Trails文件


环境配置


基本环境

源端的主机上需要装有数据库,笔者使用的Oracle11g,安装Oracle的过程就不再叙述

Oracle设置

00.开启归档模式

查看是否开启归档模式

SQL>archive log list

如果没有开启,可以使用以下命令将其打开

SQL>alter database archivelog

查看归档日志路径

SQL> show parameter DB_RECOVERY_FILE_DEST

01.开启补充日志

查看是否开启补充日志

select supplemental_log_data_min from v$database;

如果没有开启,可以用以下命令开启

alter database add supplement log data;

02.创建一个用于GoldenGate的账户

该账户需要有较高的权限

源端

00.解压GoldenGate

推荐将安装包解压后的文件的用户和用户组修改为与oracle相同

chown -R orasusr01 ogg

chgrp -R orasusr ogg


01.初始化GGSCI

进入GoldenGate的Home目录

输入命令,进入ggsci

$ ./ggsci

进入之后,输入以下命令,创建相关目录

GGSCI > CREATE SUBDIRS

用开始创建的Oracle用户登录

GGSCI > DBLOGIN USERID goldengate, PASSWORD goldengate

添加需要被采集的表,笔者需要采集test001用户下所有的表

GGSCI > add trandata test001.*

02.配置Manager

查看当前所有进程信息

GGSCI > info all

新建Manager的配置文件

GGSCI > edit params mgr

文件内容如下

port 7999

启动mgr

GGSCI > START mgr

03.配置extract

新建extract的配置文件

EDIT PARAMS etc

配置文件ext.prm

EXTRACT ext

SETENV (ORACLE_SID = "sid")

SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")

USERID userid, PASSWORD password

EXTTRAIL ./dirdat/la

dynamicresolution

table test001.*;

添加extract

ADD EXTRACT ext, TRANLOG, BEGIN NOW

并指定输出文件

ADD  EXTTRAIL ./dirdat/la,EXTRACT ext

启动ext

START EXTRACT ext

可以使用命令查看启动情况,如果处于RUNNING状态,则启动成功

GGSCI > info all

Program    Status      Group      Lag at Chkpt  Time Since Chkpt

MANAGER    RUNNING

EXTRACT    RUNNING    EXT        00:00:00      00:00:09

如果有异常,可以查看GoldenGateHome下的ggserr.log文件进行查看

03.配置pump

新建pump的配置文件

EDIT PARAMS pump

配置文件pump.prm

extract pump

passthru

rmthost 10.1.130.240, mgrport 7999

rmttrail ./dirdat/ra

dynamicresolution,nocompressupdates

table test001.*;

添加pump,并添加本地源文件

ADD EXTRACT pump, EXTTRAILSOURCE ./dirdat/la

添加pump的目标文件

ADD RMTTRAIL ./dirdat/ra, EXTRACT pump

启动

START EXTRACT pump


03.生成表结构的srcdef.def文件

目标端需要靠srcdef.def文件来掌握表结构,从而进行解析

配置flatfile.prm文件

DEFSFILE ./dirdef/srcdef.def

USERID goldengate,PASSWORD goldengate

TABLE test001.*;

生成srcdef.def文件

在GoldenGateHome目录下运行一下命令,运行时确保dirdef目录下没有srcdef.def文件

./defgen PARAMFILE ./dirprm/flatfile.prm

将生成的srcdef.def放到目标端的目录下

目标端

00.解压压缩包,并将调整其权限

01.将lib添加到根目录

libnnz11.so

libclntsh.so.11.1

flatfilewriter.so

02.初始化ggsci

03.配置manager

新建配置文件

EDIT PARAMS MGR

配置文件内容如下

port 7999

启动

START mgr

04.配置ffwriter

新建配置文件

EDIT PARAMS FFWRITER

配置文件ffwriter.prm

extract ffwriter

sourcedefs ./dirdef/srcdef.def

CUSEREXIT ./flatfilewriter.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES,PARAMS "./dirprm/ffwriter.properties"

table test001.*;

复制srcdef.def文件

复制ffwriter.properties文件

添加ffwriter并设定输入路径

ADD EXTRACT ffwriter, EXTTRAILSOURCE ./dirdat/ra

启动

START EXTRACT ffwriter


准备


检查系统,确保源端和目标端的GoldenGate各个进程都在正确运行

需要在两端的GGSCI中输入如下命令:

INFO ALL

如果修改了表,需要在源端重新生成srcdef.def文件,并重启除了Manager之外的所有组件

文件格式说明

文件标题格式

前缀_用户名_表名_年_月_日_时_分_秒_编号_后缀

00.每个表会有一组文件来记录其改变;

01.如果有持续的事务提交,每10秒会生成一个新的文件[需要看配置文件]

02.文件的编号从00000开始递增;

03.文件名可配置,在ffwriter.properties文件中配置

文件内容

"事务类型"|" DML操作类型"|"时间"|"用户名""表名"|"K"|old V|new V[|"K"|old V|new V]...

00.事务类型:

a."3":如果事务里只有一个DML操作,那么事务类型的位置会

b.“B”:如果一个事务里有多个DML操作,第一个DML的事务类型会显示为“D”

c.“E”:如果一个事务里有多个DML操作,最后一个DML操作的事务类型会显示为“E”

d.“M”:如果一个事务里有多个DML操作,除了“D”和“E”之外的DML操作的事务类型会显示为“M”

01.DML操作类型

a.“I”:INSERT操作

b.“D”:DELETE操作

c.“U”:UPDATE操作

02.在不同操作时KV的呈现

a.INSERT操作

00.旧值全部被占位符()占据

01.对于新值,如果出现在插入语句中,则被语句中的值填充,否则被占位符填充

b.DELETE操作

00.对于主键,仅在旧值里显示,新值用占位符占据

01.其他字段全部没有内容

c.UPDATE操作

00.主键无论是否被更改,都会填充对应的旧值新值

01.其他出现在update语句中的字段,则旧值和新值的位置,对应该字段修改前后的值,如果为空,则以占位符占位

02.未出现在语句中的字段,则没有内容

文件输出

输出配置文件ffwriter.properties,请见github

你可能感兴趣的:(GoldenGate4EDC-Guide)