GoldenGate4EDC-Guide

概述


GoldenGate简介

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

GoldenGate在组件中的作用

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

结构简介

GoldenGate分为两端

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

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

结构如图:


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.旧值全部被占位符(<NULL>)占据

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

b.DELETE操作

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

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

c.UPDATE操作

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

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

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

文件输出

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容