GoldenGate4EDC-Guide

概述


GoldenGate簡(jiǎn)介

GoldenGate是Oracle公司的一款數(shù)據(jù)庫(kù)中間件,它基于數(shù)據(jù)庫(kù)的二進(jìn)制日志以及事務(wù)提交,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)集群之間的數(shù)據(jù)遷移,主要用于數(shù)據(jù)庫(kù)之間的同步和備份。

GoldenGate在組件中的作用

我們用GoldenGate來(lái)實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)修改的采集,以及將這些變化在遠(yuǎn)端輸出為可供程序讀取的文本文件。

結(jié)構(gòu)簡(jiǎn)介

GoldenGate分為兩端

源端作為數(shù)據(jù)源,負(fù)責(zé)從數(shù)據(jù)庫(kù)采集數(shù)據(jù),生成Trails文件,并發(fā)送到目標(biāo)端;

目標(biāo)端作為終點(diǎn),負(fù)責(zé)處理從源端傳來(lái)的Trails文件,并將這些文件轉(zhuǎn)換為文本文件;

結(jié)構(gòu)如圖:


Oracle Golden Gate結(jié)構(gòu)圖


源端

源端上裝有Oracle和GoldenGate,GoldenGate將Oracle的數(shù)據(jù)采集并以事務(wù)為單位,寫(xiě)入本地Trails文件,并在遠(yuǎn)程的GoldenGate上生成新的Trails文件(目前只有DML操作)。相關(guān)組件如下:

manager

GoldenGate的監(jiān)控進(jìn)程,負(fù)責(zé)控制GoldenGate的其他組件

extract

從數(shù)據(jù)庫(kù)的二進(jìn)制日志中抽取變化到Trails文件

pump

從源端的Trails文件里抽取信息并推送到目標(biāo)端的Trails文件

目標(biāo)端

目標(biāo)端上的GoldenGate將源端輸送過(guò)來(lái)的GoldenGate文件以特定的規(guī)則,轉(zhuǎn)換為特定格式的文本文件。相關(guān)組件如下:

manager

GoldenGate的監(jiān)控進(jìn)程,負(fù)責(zé)控制GoldenGate的其他組件

ffwriter

將本地的Trails文件讀取并轉(zhuǎn)換為文本文件

內(nèi)部組件

ggsci

GoldenGate的控制臺(tái),可以通過(guò)這個(gè)操作GoldenGate的附屬組件

defgen

用于生成srcdef文件,供目標(biāo)端的GoldenGate使用

logdump

用來(lái)解析Trails文件


環(huán)境配置


基本環(huán)境

源端的主機(jī)上需要裝有數(shù)據(jù)庫(kù),筆者使用的Oracle11g,安裝Oracle的過(guò)程就不再敘述

Oracle設(shè)置

00.開(kāi)啟歸檔模式

查看是否開(kāi)啟歸檔模式

SQL>archive log list

如果沒(méi)有開(kāi)啟,可以使用以下命令將其打開(kāi)

SQL>alter database archivelog

查看歸檔日志路徑

SQL> show parameter DB_RECOVERY_FILE_DEST

01.開(kāi)啟補(bǔ)充日志

查看是否開(kāi)啟補(bǔ)充日志

select supplemental_log_data_min from v$database;

如果沒(méi)有開(kāi)啟,可以用以下命令開(kāi)啟

alter database add supplement log data;

02.創(chuàng)建一個(gè)用于GoldenGate的賬戶(hù)

該賬戶(hù)需要有較高的權(quán)限

源端

00.解壓GoldenGate

推薦將安裝包解壓后的文件的用戶(hù)和用戶(hù)組修改為與oracle相同

chown -R orasusr01 ogg

chgrp -R orasusr ogg


01.初始化GGSCI

進(jìn)入GoldenGate的Home目錄

輸入命令,進(jìn)入ggsci

$ ./ggsci

進(jìn)入之后,輸入以下命令,創(chuàng)建相關(guān)目錄

GGSCI > CREATE SUBDIRS

用開(kāi)始創(chuàng)建的Oracle用戶(hù)登錄

GGSCI > DBLOGIN USERID goldengate, PASSWORD goldengate

添加需要被采集的表,筆者需要采集test001用戶(hù)下所有的表

GGSCI > add trandata test001.*

02.配置Manager

查看當(dāng)前所有進(jìn)程信息

GGSCI > info all

新建Manager的配置文件

GGSCI > edit params mgr

文件內(nèi)容如下

port 7999

啟動(dòng)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

啟動(dòng)ext

START EXTRACT ext

可以使用命令查看啟動(dòng)情況,如果處于RUNNING狀態(tài),則啟動(dòng)成功

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文件進(jìn)行查看

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的目標(biāo)文件

ADD RMTTRAIL ./dirdat/ra, EXTRACT pump

啟動(dòng)

START EXTRACT pump


03.生成表結(jié)構(gòu)的srcdef.def文件

目標(biāo)端需要靠srcdef.def文件來(lái)掌握表結(jié)構(gòu),從而進(jìn)行解析

配置flatfile.prm文件

DEFSFILE ./dirdef/srcdef.def

USERID goldengate,PASSWORD goldengate

TABLE test001.*;

生成srcdef.def文件

在GoldenGateHome目錄下運(yùn)行一下命令,運(yùn)行時(shí)確保dirdef目錄下沒(méi)有srcdef.def文件

./defgen PARAMFILE ./dirprm/flatfile.prm

將生成的srcdef.def放到目標(biāo)端的目錄下

目標(biāo)端

00.解壓壓縮包,并將調(diào)整其權(quán)限

01.將lib添加到根目錄

libnnz11.so

libclntsh.so.11.1

flatfilewriter.so

02.初始化ggsci

03.配置manager

新建配置文件

EDIT PARAMS MGR

配置文件內(nèi)容如下

port 7999

啟動(dòng)

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.*;

復(fù)制srcdef.def文件

復(fù)制ffwriter.properties文件

添加ffwriter并設(shè)定輸入路徑

ADD EXTRACT ffwriter, EXTTRAILSOURCE ./dirdat/ra

啟動(dòng)

START EXTRACT ffwriter


準(zhǔn)備


檢查系統(tǒng),確保源端和目標(biāo)端的GoldenGate各個(gè)進(jìn)程都在正確運(yùn)行

需要在兩端的GGSCI中輸入如下命令:

INFO ALL

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

文件格式說(shuō)明

文件標(biāo)題格式

前綴_用戶(hù)名_表名_年_月_日_時(shí)_分_秒_編號(hào)_后綴

00.每個(gè)表會(huì)有一組文件來(lái)記錄其改變;

01.如果有持續(xù)的事務(wù)提交,每10秒會(huì)生成一個(gè)新的文件[需要看配置文件]

02.文件的編號(hào)從00000開(kāi)始遞增;

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

文件內(nèi)容

"事務(wù)類(lèi)型"|" DML操作類(lèi)型"|"時(shí)間"|"用戶(hù)名""表名"|"K"|old V|new V[|"K"|old V|new V]...

00.事務(wù)類(lèi)型:

a."3":如果事務(wù)里只有一個(gè)DML操作,那么事務(wù)類(lèi)型的位置會(huì)

b.“B”:如果一個(gè)事務(wù)里有多個(gè)DML操作,第一個(gè)DML的事務(wù)類(lèi)型會(huì)顯示為“D”

c.“E”:如果一個(gè)事務(wù)里有多個(gè)DML操作,最后一個(gè)DML操作的事務(wù)類(lèi)型會(huì)顯示為“E”

d.“M”:如果一個(gè)事務(wù)里有多個(gè)DML操作,除了“D”和“E”之外的DML操作的事務(wù)類(lèi)型會(huì)顯示為“M”

01.DML操作類(lèi)型

a.“I”:INSERT操作

b.“D”:DELETE操作

c.“U”:UPDATE操作

02.在不同操作時(shí)KV的呈現(xiàn)

a.INSERT操作

00.舊值全部被占位符(<NULL>)占據(jù)

01.對(duì)于新值,如果出現(xiàn)在插入語(yǔ)句中,則被語(yǔ)句中的值填充,否則被占位符填充

b.DELETE操作

00.對(duì)于主鍵,僅在舊值里顯示,新值用占位符占據(jù)

01.其他字段全部沒(méi)有內(nèi)容

c.UPDATE操作

00.主鍵無(wú)論是否被更改,都會(huì)填充對(duì)應(yīng)的舊值新值

01.其他出現(xiàn)在update語(yǔ)句中的字段,則舊值和新值的位置,對(duì)應(yīng)該字段修改前后的值,如果為空,則以占位符占位

02.未出現(xiàn)在語(yǔ)句中的字段,則沒(méi)有內(nèi)容

文件輸出

輸出配置文件ffwriter.properties,請(qǐng)見(jiàn)github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 文章作者:王亮 , 版權(quán)歸原作者所有,未經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載文章來(lái)源:騰訊云技術(shù)社區(qū)——騰云閣:https:/...
    騰訊云技術(shù)社區(qū)_騰云閣閱讀 3,772評(píng)論 1 5
  • 一、源題QUESTION 36Your database is open and the LISTENER lis...
    貓貓_tomluo閱讀 1,280評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,766評(píng)論 18 399
  • 今天回去看了我高一時(shí)的班主任,從高一被她教后,我沒(méi)有再正面和她聊過(guò)天。我也不知道為什么,四年后我會(huì)選擇回來(lái)看看。教...
    地理小孩閱讀 411評(píng)論 0 2