GoldenGate同步解決方案及性能測試_第1頁
GoldenGate同步解決方案及性能測試_第2頁
GoldenGate同步解決方案及性能測試_第3頁
GoldenGate同步解決方案及性能測試_第4頁
GoldenGate同步解決方案及性能測試_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

GoldenGate同步處理方案

及性能測試

目錄

1、GoldenGate同步方案.......................................

1.1使用GoldenGate初始化加載..........................

1.2一對多數(shù)據(jù)同步(廣播復(fù)制).........................

L3多對一數(shù)據(jù)同步(集中復(fù)制)..........................

1.4數(shù)據(jù)轉(zhuǎn)換和過濾......................................

1.5有關(guān)目H勺端高數(shù)據(jù)安全性下H勺GoldenGate配置方案......

1.6GoldenGate雙向復(fù)制(active-active)...................................

2、GoldenGate數(shù)據(jù)同步性能測試..............................

2.1測試中重要監(jiān)測數(shù)據(jù)和監(jiān)測方式.......................

2.2測試腳本和GoldenGate配置..........................

23測試環(huán)節(jié)............................................

2.4性能測試成果........................................

1、GoklenGate同步方案

GoldenGate工具雖小,但它提供表級字段級同步映射,并且同步性能優(yōu)秀、資源消耗

低,使它的靈活性很強,可以提供多種數(shù)據(jù)同步、冗災(zāi)II勺處理方案。

1.1使用GoldenGate初始化加載

這里所指H'、JGoldenGate初始化加載,只是它指提供日勺directload方式,由于其他幾種

官方簡介日勺初始化方式要么需要借助其他數(shù)據(jù)庫工具(如extract->SQL*Loader),要么中間

走了完全沒必要的環(huán)節(jié)導(dǎo)致性能很差(如extract?>file->replicat方式),都不算純粹的

GoldenGate方式。

初始化加載架構(gòu):

SOURCE06

TransactionLog

orLogTable

_L圖中,顯示了初始化加載啟用了兩條同步路線:上面一條是真正的initialload,負貢

將源數(shù)據(jù)端的I數(shù)據(jù)一次性發(fā)送到目口勺數(shù)據(jù)庫;卜.面一條,其實就是一般日勺GoldenGate同步

進程,負責抓取初始化加載時源端數(shù)據(jù)庫進行H勺在線數(shù)據(jù)變化。由于在實際應(yīng)用中,往往需

要在生產(chǎn)庫(源數(shù)據(jù)庫)不停機日勺狀態(tài)下,將數(shù)據(jù)加載到備用數(shù)據(jù)庫(目日勺數(shù)據(jù)庫)中并應(yīng)

用實時同步,在數(shù)據(jù)初始化H勺過程中,生產(chǎn)庫將繼續(xù)進行正常的事務(wù)操作,因此此時需要有

抓取進程在初始化時開始將這些變化捕捉,以免數(shù)據(jù)丟失。

實際布署時需要注意對的日勺執(zhí)行次序,大體可以分為如下幾步:

(1)源端和目的端創(chuàng)立配置各個同步進程。

(2)啟動源端同步抓取進程(圖上的ChangeExtract),開始捕捉變化。

(3)啟動初始化在程(圖上的Initial-LoadExtract),開始數(shù)據(jù)初始化加載。

(4)等初始化加載結(jié)束,啟動目日勺端復(fù)制應(yīng)用進程(圖上B勺ChangeReplicat),開始

實時同步應(yīng)用。

在目的端復(fù)制應(yīng)用進程(圖上日勺ChangeReplicat)中,需要在參數(shù)文獻中配置

HANDLECOLLISIONS以防止反復(fù)應(yīng)用第2和第3步之間的數(shù)據(jù)變化,由于這部分數(shù)據(jù)

已經(jīng)包括在初始化加載中傳到目II勺數(shù)據(jù)庫中了。

在這里需要尤其提醒的一種概念上的問題,GoldenGate的初始化同步不會也不需要去

初始化目11勺端的SCN號。這個問題在我與多位數(shù)據(jù)庫DBA11勺交流中發(fā)現(xiàn),他們往往認為

GoldenGate是通過SCN來判斷數(shù)據(jù)的應(yīng)用狀況I向。GoldenGate的同步與Streams不一樣,

它不需要依賴兩端數(shù)據(jù)庫保持一致的SCN來應(yīng)用同步,實際上它只在抓取時也許會與數(shù)據(jù)

庫的SCN有關(guān)聯(lián)(抓取時可以指定源數(shù)據(jù)庫的特定SCN號開始解析日志),在trail傳播以及

目的端應(yīng)用時,都和源端數(shù)據(jù)庫的SCN亳無關(guān)系。它的實質(zhì)是通過自己的一套隊列文獻檢

查點機制來實現(xiàn)隊列數(shù)據(jù)的管理.,在FI的端則通過數(shù)據(jù)向唯一鍵來定位數(shù)據(jù)行,trail文獻最

終解析成SQL語句在目的端數(shù)據(jù)庫執(zhí)行而實現(xiàn)數(shù)據(jù)歐J應(yīng)用。因此這里的初始化加載,完全

可以使用其他數(shù)據(jù)庫工具來實現(xiàn),例如說exp/imp、SQL*LoaderRMAN夏制數(shù)據(jù)庫等。

如下為一種簡樸的I初始化加載日勺例子,對于實時同抄配置同上面簡介的I是同樣的,這里

不再闡明,只列出初始化加載部分日勺進程配置。

1.1.1GoldenGate初始化加載示例(directload方式)

源端

添加提取進程:

GGSCI>addextractextl^ourceistable一沒有,tranlog,意味著不是通過11志〃:,:仃beginxxx,表達

尚未啟動;使用sourceistable參數(shù)不會使用檢查點機制

配置文獻如下:

/***

extractextl

useridddw,passwordddw

rmthost4,mgrport7401

rmttaskreplicat,groupreptl一注.3:是rmttask,指定HH'、J星制進程.名

tabicddw.tcst;

**7

不需要為該進程添加遠端隊列(rmttrail)o

目的端

添加復(fù)制應(yīng)用進程:

addreplicatreptl,specialrun一發(fā)達一次性「川我

/***

replicatreptl

assumetargetdefs

useridddw,passwordddw

reperrordefault,discard

discardfileD:\reptmy.dsc,append,megabytes100

INSERTAPPEND--使用力接途徑力口載,提高加載速度

HANDLECOLUSIONS-的端已經(jīng)有數(shù)據(jù)時,略過反復(fù)數(shù)據(jù)借浜

MAPddw.test,TARGETddw.testl;

***/

注意,這里“勺extract和replicat進程添加完后在infoall中看不到這個進程,不過viewreport

可以跟蹤到。

要開始加載,在源端執(zhí)行:

GGSCI>startexttmy

目的端日勺replicat進程不需要去啟動,會自動進行數(shù)據(jù)應(yīng)用。

1.1.2與Oracle數(shù)據(jù)泵數(shù)據(jù)加載速度的比較

按照示例中H勺配置,對一張600萬行數(shù)據(jù)H勺測試表進行初始化加載,完全加載結(jié)束大概

需要50分鐘。

使用Oracle10gH勺數(shù)據(jù)泵工具對同樣的表,通過DBLinkH勺方式進行初始化加載:

C:\>impdpddw/ddw@orcljob_name=zhouimptables=testCONTENT=DATA_ONLY

network_link="DB148.REGRESS.RDBMS.DEV.US.ORACLE"

只需要1分半鐘就導(dǎo)完了600萬行數(shù)據(jù)。兩者的執(zhí)吁效率差異太大了。

因此在一般狀況下,盡量使用其他高效的數(shù)據(jù)庫傳播工具來完畢初始化加載,而不要用

GoldenGate提高H勺初始化功能。

L2一對多數(shù)據(jù)同步(廣播復(fù)制)

一對多數(shù)據(jù)同步實現(xiàn)架構(gòu):

SOURCEDB<dsn1>

PrimaryEXTRACT

Extract<ext>

EXTTRAIL

<local_trail>

RMTTRAILREPLICATTARGETDB

Network<remote_trail_1><rep_1><dsn_2>

DataA

PumpRMTHOSTReplicat

<target_1>

EXTRACT

<pump_1>

Data

RMTHO:Replicat

Pump

〈target」

EXTRACTRMTTRAILREPLICATTARGETDB

<pump_2><remote_trail_2><rep_2><dsn3>

GoldenGate對于多市一時實現(xiàn)方式,就是對于同一種源建立多種提取進程同步進行,

也就是說,對應(yīng)不一樣的目的端,分別配置同步進程進行同步。配置過程與前面是同樣的I。

這里的I多種目的端,有也許對應(yīng)不一樣的數(shù)據(jù)庫,也有也許是同一種庫中日勺不一樣對象。

假如是同步到同一種庫中時不一樣對象,除了分別配置同步進程以外,有時候也可以在一種

進程中完畢,例如,可以在亞制端如此配置:

/***

REPLICATrepl46el

USERIDcoss3,PASSWORDcoss3

assumetargetdets

REPERRORdefault,discard

DISCARDFILEd:\ggoracle\log\repl46el.dsc,append,megabytes200

HANDLECOLLISIONS

MAPddw.test,TARGETddw.testl;

MAPddw.test,TARGETddetest2;-l-j-張表同少對應(yīng)多種衣

MAPddw.test,TARGETddw.test3;

???/

當然,假如同步數(shù)據(jù)負載較大的狀況下,還是提議在進程級別分開。

L3多對一數(shù)據(jù)同步(集中復(fù)制)

多對一數(shù)據(jù)同步架構(gòu):

SOURCEDBEXTRACTEXTTRAILEXTRACT

<dsn_1><ext_1><local_trail_1><pump_1>

Primary

ExtractAll。

Primary

BExtract

SOURCEDBEXTRACTEXTTRAILEXTRACT

<dsn_2><ext_2><local_trail_2><pump_2>

多對一數(shù)據(jù)同步實現(xiàn)方式同一對多,也是將extract-replicat將進程拆提成多種。

多對一同步需要注意的是,所有源端和目H勺端的I表都應(yīng)當使用一致H勺主鍵約束,并且在

不?樣的源端不應(yīng)當對同?鍵值日勺數(shù)據(jù)進行維護。也就是說,需要在業(yè)務(wù)上將不?樣源日勺數(shù)

據(jù)隔離開來,以防止對同一數(shù)據(jù)歐J覆蓋更改等問題。一般用于維護業(yè)務(wù)的I區(qū)域性數(shù)據(jù)、然后

統(tǒng)一同步到業(yè)務(wù)中心數(shù)據(jù)源的業(yè)務(wù)場景。

尚有一種需要注意的方面是TRUCATER勺捕捉,在多對一時配置下應(yīng)防止捕捉。由于

GoldenGate處理TRUNCATE同步是直接傳播了這個語句,并不會提供詳細刪除的數(shù)據(jù)信息

(沒有REDO也無法提供),因此無論哪個源端執(zhí)行了TRUNCATE,假如同步到了目的端,都

會直接把目的端的表數(shù)據(jù)直接刪光,無論目的數(shù)據(jù)與否是來源于這個源,導(dǎo)致數(shù)據(jù)的不一致。

1.4數(shù)據(jù)轉(zhuǎn)換和過濾

GlodenGate中支持字段映射、數(shù)據(jù)篩選轉(zhuǎn)換,以及調(diào)用執(zhí)行數(shù)據(jù)庫腳本或者SQL語句

等,在一定條件下,甚至可以實現(xiàn)實時ETL的功能。

1.4.1字段映射

GoldenGate中字段的映射一般配置在復(fù)制應(yīng)用端的MAP參數(shù)中,字段映射規(guī)定兩邊盡

量一致的字段日勺類型,當然也容許CHAR<?>VARCHAR之類的轉(zhuǎn)換。對于不一樣字段類型日勺映

射,最佳詳細參照GoldenGate官方文檔以得到足夠的支持信息,并做好測試驗證以防止數(shù)

據(jù)丟失等。如下是字段映射的配置例子:

例子1:

/***

MAPddw.altest,targetddw.a2test,-target前一定要留個空格,否則會報錯

COLMAP(id=id,typel=typel,sell_datel=sell_date2);--字段映射配置

***/

例子2:

/***

MAPddw.altest,targetddw.a2test,

COLMAP(USEDEFAULTS,sell_datel=sell_date2);-USEDEFAULTS々達門動映射同名字段

MAPddw.a3test,targetddw.a4test;--不一樣的表映射,不一樣H勺map

MAP"ddw.a5testz;target"ddw.a6test”;-在行嗎大小、,致?lián)葱枰枬鷦e人小叮

例子3:

**

MAPddw.altest,targetddw.a2test,

COLMAP(USEDEFAULTS,num=111,name="abc",now_da:e=eDATENOW());

--字段指定固定值,注意字符值加引號,數(shù)字值不可加引號:@DATENOW()表達目前系統(tǒng)時間

***/

例子4:

/***

MAPddw.altest,targetddw.a2test,

COLMAP(USEDEFAULTS,

transaction_date=@DATE("YYYY-MM-DD","YY”,YEAR,“MM〃,MONTH,“DD〃,DAY),);

-多種字符字段整合轉(zhuǎn)換為目的端的一種時間字段

***/

在這里順便插入一種很輕易出錯的表映射例子:

/***

mapddw.a*,targetddw.*;-通配符表達所仃a開頭的表進行映射,注意的是target背面的表名千萬不

能也寫成ddw.a*,否則會被映射成目的端aa開頭的表

???

1.4.2字段和數(shù)據(jù)篩選

GoldenGate中字段的篩選一般都在TABLE參數(shù)中配置(目的端是在MAP參數(shù))。一般推

薦在源端extract進程配置文獻中配置,這樣可以有效得減小trail文獻的大小,減小網(wǎng)絡(luò)負

載。如下是某些篩選配置例子(只列出配置文獻的TABLE參數(shù)部分)。

(1)字段篩選:

/***

tableddw.aatest,

FETCHCOLS(id,name,typel,sell_dale,valuel);一表明只提I僅這"宇廣段

***/

使用指定字段做主鍵:

/***

tableddw.aatest,

KEYCOLS(clienjtaq,id);

…/

(2)數(shù)據(jù)過濾:

使用WHERE條件:

/***

tableddw.aatest,where(typel="1"ANDtype2="2");--表明只提以表中typel='l并type2='2Hj記錄

**

如卜提取非NULL值:

***

tableddw.aatest,where(value

使用FILTER參數(shù):

‘***

tableddw.aatest,FILTER((numl*num2)>1000);

與WHERE條件不一樣的是,F(xiàn)ILTER只能背面數(shù)字,字符型需要轉(zhuǎn)換后才可以使用,如:

***

tableddw.aatestFILTER(@STRFIND(NAME,"JOE")>0).

***

FILTER參數(shù)日勺優(yōu)勢是還可以指定只在某種DML操作卜才過濾,例如:

tableddw.aatest,FILTER((ONUPDATE,ONDELETE,(numl*num2)>1000);

一只在UPDATE和DELETE操作時過浦numl*num2不不小于1000的值

**

1.4.3調(diào)用執(zhí)行SQL或存儲過程

在GlodenGate指令庫中有個SQLEXEC指令,可以用來調(diào)用執(zhí)行數(shù)據(jù)庫存儲過程或者自

定義的SQL語句,可以指定輸入?yún)?shù),輸出參數(shù)可以作為字段與目的表映射。使用這個指

令,可以實現(xiàn)將源表做簡樸連接(tablejoin)然后將連接后成果同步到目的表,到達簡樸的

轉(zhuǎn)換目的。

在復(fù)制端配置如下(以SQL為例,procedure是同樣日勺,改成過程名即可):

/***

replicatrepjoin

useridddw,passwordddw

sourcedefsd:\tools\GG\gg1Og\dirdef\extjo.ref

reperrordefaultdiscard

discardfileD:\repjoin.dsc,append,megabytes100

gettruncates

mapddw.altest,targetddw.al2test,

sqlexec(idtestid,-自定義執(zhí)行語句的唯一標識

為輸入?yún)?shù)

query"selectnamezvaluelfroma2testwherename_id=:id_param"/-:id_param

params(id_param=NAME[D)),—將輸入?yún)?shù)指定為源表中某列

假如沒有輸入?yún)?shù),則這部分改為NOPAFAMS

colmap(USEDEFAULTS,name=,valuel=testid.valuel);

--新的字段映射.testid.name表達語句輸;H參數(shù)name

***/

上面的配置案例,實現(xiàn)了將ddw.altest表中namejd字段通過字典表a2test轉(zhuǎn)換為對應(yīng)

的真實name值,并增長了一種value字段,然后映射到ddw.al2test表中。ddw.al2test表

中的記錄實際就是前面ddw.altest表和a2test表連接生成Fl勺記錄。

不過,這里存在?種問題:字典表a2test是在源數(shù)據(jù)庫呢,還是在目的數(shù)據(jù)庫?顯而易

見,配置在復(fù)制進程的配置文獻中,那條語句是在目的端數(shù)據(jù)庫執(zhí)行的(假如執(zhí)行procedure

那么這個過程也必須建立在目口勺端),字典表a2test在目的端(在我這個例子中)。并且同步

是由表ddw.altest上的事務(wù)觸發(fā)的,字典表a2test中的數(shù)據(jù)無論怎么改都不會引起這個數(shù)據(jù)

同步。這種狀況下,可以考慮將字典表a2test也進行同步,來處理這個問題。

SQLEXEC指令也可以在提取進程中使用。假如有輸四參數(shù)作為額外H勺映射列,這個時候

需要將查詢成果也一并傳播過去??梢酝ㄟ^參數(shù)TOKENS進行傳遞,然后再在目的端映射。

如下對TOKENS的使用進行闡明。

使用USERTOKENSAREA

可以使用TOKENS參數(shù),在提取端將自定義的數(shù)據(jù)放入trail中,傳遞到目的端,映射到

目的J端口勺表中。這里針對前面SQLEXEC提出的問題示例。

提取端extract的TABLE配置:

/***

TABLEddw.test,

sqlexec(idsqlid,

query"selectnodejdcodeidfromic_sysnodewhererownum=l",NOPARAMS),

TOKENS(TK_CODE=sqlid.codeid);-將提取端查詢出的nodejd字段值,標識為TK_CODE放入ddw.test

表的trail文獻中,一起傳遞

***/

目的端replicat『、JMAP配置:

/***

MAPddw.test,TARGETddw.testother,

COLMAP(USEDEFAULTS,SITE_CODE=@TOKEN("TK_CODE"));-^TK_CODE值映射給I的字段

***/

1.4.4數(shù)據(jù)庫DML操作過濾

數(shù)據(jù)庫DML操作過濾,這里是指選擇與否捕捉INSERT、UPDATE>DELETEo在某些業(yè)務(wù)

場景下,只需要捕捉某一種特定H勺DML操作即可,例如業(yè)務(wù)數(shù)據(jù)庫往數(shù)據(jù)倉庫H勺數(shù)據(jù)同步,

往往只需要捕捉INSERT操作,而對于UPDATE、DELETE則不容許同步目的庫。

默認下,INSERT、UPDATE.DELETE都是捕捉日勺,可以分別在Extract進程的配置文獻中

加入IGNOR日NSERTS、IGNOREUPDATES、IGNOREDELETES進行忽視,當然,在這種狀況下,

業(yè)務(wù)上需要做對應(yīng)口勺限制,例如忽視DELETE操作時,源數(shù)據(jù)庫應(yīng)嚴禁反復(fù)插入DELETE掠日勺

鍵值。

參數(shù)使用示例(表達只捕捉INSERT):

***

IGNOREUPDATES

IGNOREDELETES

***/

TRUNCATE是一種特殊H勺刪除操作,默認配置下GoldenGate不進行捕捉,一般需要在

Extract進程日勺配置文獻中加入GETTRUNCATES來指定捕捉。

1.5有關(guān)目的端高數(shù)據(jù)安全性下的GoldenGate配置方案

1.5.1配置方案

由于GoldenGate的原則配置下,是通過源端抓取進程向FlII勺端發(fā)送隊列文獻的方式傳

播數(shù)據(jù)的,但在實際應(yīng)用中,會出現(xiàn)這樣一種有關(guān)安全面的問題:假如上級機器的安全方略

不容許外網(wǎng)直接往里發(fā)送數(shù)據(jù),怎樣進行數(shù)據(jù)同步配置。

GoldenGate是有提供一種由目的端積極“申請”源端進行數(shù)據(jù)傳播的方式,以保證內(nèi)

外網(wǎng)不一樣安全域下的數(shù)據(jù)安全保障。

處理方案的體系架構(gòu)如下;

FirewalltoInternal

PublicNetworkFirewall

重要是通過目的端一種額外的aliasExtract進程,實現(xiàn)由目的端(可信任域)積極祈求、向

源端(未信任域)提供數(shù)據(jù)傳播的連接的過程。

詳細的驅(qū)動模式如下(翻譯自官方文檔,也許表述得不精確):

(1)啟動可信任域B、JaliasExtract進程

(2)可信任域P'JGGSCl向未信任域mgr主進程發(fā)送消息,以啟動對應(yīng)日勺passiveExtract

進程。消息包括可信任域日勺主機名或IP,以及一種可信任域mgr主進程日勺端口號。

(3)未信任域接受消息后,啟動passiveExtract進程,并打開一種可用的端口號。

(4)未信任域mgr主進程將該端II號返回給可信任域的GGSCL

(5)可信任域的GGSCI向當?shù)豰gr主進程發(fā)送祈求以啟動Collector進程。

(6)當?shù)豰gr啟動Collector進程,通過未信任域提供的I端口號對未信任域進行監(jiān)聽。

(7)Collector進程打開與未信任域passiveExtract進程日勺連接。

(8)同步數(shù)據(jù)通過連接從未信任域passiveExtract進程傳播至ljCollector進程,然后寫入

當?shù)豻rail,被R叩licat進程應(yīng)用。

這里未信任域H勺passiveExtract進程,即是源端口勺datapumpExtract進程,因此只需要

改動源端W'JdatapumpExtract進程、新增一種aliasExtract進程即可(Collector進程由目W、J

端mgr自動配置)。

1.5.2配置案例

1.源端配置(146±)

(1)創(chuàng)立提取進程(與一般狀況下完全同樣)

GGSCI>addextractexta,tranlog,beginnow

配置文獻exta.prm:

/***

extractexta

SETENV(ORACLE_SID=ORCL)

useridCOSS360,passwordCOSS360

exttrailC:\ggoracle\dirdat\ea

dynamicresolution

gettruncates

TABLECOSS360.per_test,keycols(sampletime,objectid);

**7

創(chuàng)立當?shù)仃犃校?/p>

GGSCI>ADDEXTTRAILC:\ggorade\dirdat\ea,extractexta

(2)pump進程(passiveextract進程)

倉ij立passivepump:

GGSCI>ADDEXTRACTpumpa,exttrailsourceC:\ggoracle\dirdat\ea,beginnow,passive,desc

"passivepump"-passivepassiveextractprocess

配置文獻pumpa.prm:

/***

extractpumpa

useridCOSS360,passwordCOSS360

-rmthost42,mgrport7801-原先:向rmthost需要故泣擇

RMTHOSTOPTIONScompress-passiveextract專有,參數(shù)

rmttrailD:\ggoracle\dirdat\traill46\ea

NOPASSTHRU

gettruncates

TABLECOSS360.per_test,keycoIs(sampletime,objectid);

***/

創(chuàng)立遠端隊列:

addrmttrailD:\ggoracle\dirdat\traill46\eaextractpumpa

2.目的端配置(142上)

(1)添力口aliadextract進程

aliasExtract進程不需要配置文獻

添加語法:

ADDEXTRACT<group>

,RMTHOST{<hostname>|<IPaddress>}

,{MGRPORT<port>}|{PORT<port}

[,RMTNAME<name>]

[,DESC”〈description〉”]

此處測試的)創(chuàng)立命令如卜.:

GGSCI>addextractextl46pa,rmthost46,mgrport7801,rmtnamepumpa

-簫要定義源端的地址、端口,并且假如aliasextract名稱和passiveextract名稱不一樣,需要尤其指定

rmtname

(2)添加應(yīng)用進程(與一般狀況下完全同樣)

GGSCI>addreplicatrepl46eaexttrailD:\ggoracle\dirdat\traill46\ea,nodbcheckpoint

配置文獻repl46ea.prm:

/***

REPLICATrepl46ea

USERIDcoss3,PASSWORDcoss3

assumetargetdefs

REPERRORdefault,discard

DISCAKDI-ILtd:\ggoracle\log\repl46ea.dsc,append,megabytes200

gettruncates

HANDLECOLLISIONS

BATCHSQLBATCHESPERQUEUE200,OPSPERBATCH2023

MAPcoss360.pertest,TARSETcoss3.pertest,

keycoIs(sampletime,objectid);

***/

3.同步進程的啟動和關(guān)閉

注意,passiveextract(這里是pumpa)不應(yīng)當被手動有動(手動也無法啟動)。在上面日勺

進程創(chuàng)立和配置完畢后,對的的啟動方式如下:

(1)源端startexta,目的端startrepl46ea

(2)目的J端startextl46pa(aliasExtract)

(3)在對的的配置下,p」mpa會自動啟動。Pumpa啟動后,同步正常開始。

同樣,進程關(guān)閉時,無論在源端關(guān)閉passiveextract或是在目及I端關(guān)閉aliasextract,對

應(yīng)的aliasextract和passiveextract都會自動關(guān)閉。

1.6GoldenGate雙向復(fù)制(active-active)

雙向復(fù)制系統(tǒng)架構(gòu)如卜:

PrimarySystemSGeondarySystem

SOURCEDB.......EXTRACTEXTTRAILEXTRACTNetworkRMTTRAILREPLICA1??…TARGETDB

<dsn_1><oxt_1><localjrail_1><pump_1>A<romote_tralM><rop_1><dsn_2>

TARGETDB?????REPLICATRMTTRAILEXTRACTEXTTRAILEXTRACT?????SOURCEDB

<dsn_l><rep_2><remote_trail_z>?pump_2>?iocauraii_2>

GoldenGate雙向復(fù)制,意即兩端數(shù)據(jù)庫互為源數(shù)據(jù),無論在哪一端上對業(yè)務(wù)數(shù)據(jù)進行

操作,都將同步應(yīng)用到另一端。

1.6.1雙向復(fù)制的注意點

1.防止數(shù)據(jù)循環(huán)

雙向復(fù)制中,最重要歐J問題是需要防止數(shù)據(jù)口勺循環(huán)應(yīng)用。在GoldenGate中,需要從兩

方面進行防止:

(1)防止Extract進程抓取Replicat進程的SQL操作.

在默認配置下,GoldenGate的JExtract進程會忽視捕捉由Replicat執(zhí)行日勺SQL操作

(Teradata除外,需要進行額外配置),因此這部分一般不需要額外設(shè)置。

(2)使Extract進程識別當?shù)豏eplicat執(zhí)行日勺DML事務(wù),并進行忽視。

這步在Oracle(10gandlater)中外J配置為在Extract進程加入?yún)?shù):

TRANLOGOPTIONSEXCLUDEUSER<username〉進行排除。

不一-樣歐I數(shù)據(jù)庫這里需要配置H勺參數(shù)不一-樣。假如是Oracle9i或之前的版本,需要配

置tracetable。

2.防止數(shù)據(jù)沖突

由于是雙向復(fù)制,那么當兩端都對同一數(shù)據(jù)進行操作時,就會發(fā)生沖突。例如同步對某

行數(shù)據(jù)進行修改,修改H勺操作將會被覆蓋(視LAG以及事務(wù)的先后);乂例如兩端插入或刪

除相似鍵值H勺數(shù)據(jù)。

對于此類數(shù)據(jù)沖突,最佳是在業(yè)務(wù)應(yīng)用層處理。例婦,可以劃分兩端數(shù)據(jù)庫應(yīng)用的業(yè)務(wù)

范圍,一部分數(shù)據(jù)只在一端修改維護,另一端則修改維護其他數(shù)據(jù);在兩端定義不一樣H勺健

值生成方略;關(guān)注同步表上的觸發(fā)器和ondeletecascade約束。也可以借助GoldenGate的

映射和過濾功能,對于兩湍同步日勺數(shù)據(jù)進行辨別。

總之,在配置雙向復(fù)制環(huán)境時,需要綜合考慮當時業(yè)務(wù)狀況,一般都需要在應(yīng)用層進行

合適時修改,以防止數(shù)據(jù)沖突帶來H勺數(shù)據(jù)丟失和不一致。

1.6.2雙向配置示例

這個示例中,ggdba顧客作為GoldenGate專用顧客,ddw和ddws分別為兩端數(shù)據(jù)庫需

要同步的schema(也可以同名,這里是為了便于區(qū)別),通過在兩端Extract中配置排除ggdba

的操作防止循環(huán)應(yīng)用。如下ddw結(jié)尾時進程均在ddw顧客所在數(shù)據(jù)庫,ddws結(jié)尾的進程均

在ddws顧客所在數(shù)據(jù)庫。

⑴ddw==>ddws

添加提取進程:

GGSCI>addextractextddw,tranlog,beginnow

/***

extractextddw

useridggdba,passwordggdoa

exttrailE:\ggoracle\dirdat\el

tranlogoptionsexcludeuserggdba-排除捕捉ggdba

dynamicresolution

gettruncates

TABLEddw.*;

***/

GGSCI>addexttrailE:\ggoracle\dirdat\el,extractextddw

添力「datapump:

GGSCI>addextractpumpddw,exttrailsourceE:\ggoracle\dirdat\el,beginnow

/***

extractpumpddw

useridggdba,passwordggdba

rmthost01,mg^port7801

rmttrailE:\ggoracle\dirdat\rep\el

PASSTHRU

gettruncates

tableddw.*;

***/

GGSCI>addrmttrailE:\ggoracIe\dirdat\rep\e1,extractpumpddw

添加復(fù)制應(yīng)用進程

GGSCI>addreplicatrepddws,exttrailE:\ggoracle\dirdat\rep\el,nodbcheckpoint

/???

replicatrepddws

useridggdba,passwordggdba

ASSUMETARGETDEFS

reperrordefault,discard

discardfileE:\ggoracle\log\repddws.dsc,append,megabytes200

gettruncates

HANDLECOLLISIONS

MAPddw.*,TARGETddws.*;

***/

⑵ddws==>ddw

添加提取進程:

GGSCI>addextractextddws,tranlog,beginnow

/***

extractextddws

useridggdba,passwordggdba

exttrailE:\ggoracIe\dirdat\e2

tranlogoptionsexcludeuserggdba”排除捕捉ggdba

dynamicresolution

gettruncates

TABLEddws.*;

**

GGSCI>addexttrailE:\ggoracle\dirdat\e2,extractextddws

添加datapump:

GGSCI>addextractpumpddws,exttrailsourceE:\ggoracle\dirdat\e2,beginnow

/***

extractpumpddws

useridggdba,passwordggdba

rmthost192.168.1,101,mg^port7801

rmttrailE:\ggoracle\dirdat\rep\e2

PASSTHRU

gettruncates

tableddws.*;

**7

GGSCI>addrmttrailE:\ggoracle\dirdat\rep\e2,extractpumpddws

添加復(fù)制應(yīng)用進程:

GGSCI>addreplicatrepddwzexttrailE:\ggoracle\dirdat\rep\e2,nodbcheckpoint

/***

replicatrepddw

useridggdba,passwordggdba

ASSUMETARGETDEFS

reperrordefaultdiscard

discardfileE:\ggoracle\log\repddw.dsc,append,megabytes200

gettruncates

HANDLECOLLISIONS

MAPddws.*zTARGETddw.*;

***/

啟動所有進程,雙向復(fù)制開始。

2、GoktenGate數(shù)據(jù)同步性能測試

這個GoldenGate同步性能測試,是在此前項目中,為測試該工具與否能滿足實際項目

中數(shù)據(jù)同步的1實時性、高負載性,自己做的一次偽性能測試。

由于測試條件和個人能力所限,測試僅在局域網(wǎng)內(nèi)的一般PC(實際為虛擬機上劃分的

兩個OS環(huán)境)上進行;測試中的事務(wù)僅為單一簡樸語句(Insert),同步的J表為一對一進行

同步;測試中源端只提供了每秒5000多條日勺事務(wù)量,實際可以調(diào)整得更高些(當然受數(shù)據(jù)

庫性能制約),但在這個條件下峰值測試沒有什么意義;GoldenGate日勺參數(shù)配置也不能滿足

最優(yōu)化配置”

測試重要目H'、J:

(1)反應(yīng)在這個條件下,實時同步大體日勺性能效率。

(2)提出一種GoldenGate實時同步性能測試臥J方案。

(3)提出實際項目布署中,需要考慮到哪些負載問題。

2.1測試中重要監(jiān)測數(shù)據(jù)和監(jiān)測方式

(1)源端和目的端每秒提交數(shù)據(jù)量

測試數(shù)據(jù)生成時,以1秒為間隔記錄2端端口性能表的數(shù)據(jù)量,記錄在測試日志表

GG_PERFORMANCE_TESTLOG中。

(2)測試過程中兩端數(shù)據(jù)庫生成I為REDO量

測試前清空兩端數(shù)據(jù)庫的歸檔日志,測試后switch日志組,記錄歸檔文獻生成量。同

步在測試中在線監(jiān)測有關(guān)會話生成的REDO量。

(3)生成的測試數(shù)據(jù)在表空間中占用H勺空間大小

測試后分析per_test表進行空間大小記錄。

(4)測試數(shù)據(jù)傳播時生成『、Jtrail文獻大小

關(guān)閉trail文獻自動清除,比較測試前后對應(yīng)trail隊列口勺增長狀況。

(5)記錄測試時兩端U勺網(wǎng)絡(luò)流量狀況

通過金山衛(wèi)士的流量監(jiān)控功能監(jiān)控。同步在線監(jiān)測replicat端的lag狀況。

2.2測試腳本和GoldenGate配置

同步性能測試在2個虛擬機之間進行,IP分別為和,由146向142同步數(shù)據(jù),146±insert

一條新記錄作為一種事務(wù)提交。同步測試表為PER_TESTo

2.2.1測試腳本

(1)DBLink

為監(jiān)控以便,146上建立142口勺DBLink,重要為記錄兩邊數(shù)據(jù)庫提交打勺數(shù)據(jù)量,并不用于

數(shù)據(jù)同步:

connecttocoss3identifiedbycoss3

using'orcll42';-1461142數(shù)據(jù)庫的服務(wù)名

(2)性能測試日志表

createtableGG_PERFORMANCE_TESTLOG

(

RECORD_DATETIMESTAMP(6),

COUNTS_142NUMBER,

COUNTS_146NUMBER,

DIFFERENCENUMBER,

MARKSVARCHAR2(500)

)

(3)測試數(shù)據(jù)生成腳本

CREATEORREPLACEPROCEDUREP_GG_PERFORDATA(

/*

*INSERTTESTDATAFORTESTINGGOLDENGATESYNCPERFORMANCEDATA;

?THEUSERWHOEXECPROCEDUREP_GG_PERFORDATANEEDS'executeondbmsjock'

PRIVILEGE

*AUTHORZHOUJIONG2011-04-07

*/

p_looptimeinplsjnteger

)

AS

v_datedate;

Begin

v_date:=sysdate;

foriinl..p_looptimeloop

/**portperformancedata**/

insertintoPER_TEST

(sampletime,

objectid,

step,

OBTAINABLE,

PORT_IN_PKT_BROAD_SPEED,

PORT_IN_PKT_DIS_SPEED,

PORT_IN_PKT_ERR_SPEED,

PORT_IN_PKT_MULTI_SPEEDZ

PORT_IN_PKT_NUNI_SPEEDZ

PORT_IN_PKT_UNI_SPEED,

PORTJN_SPEEDZ

PORT_OUT_PKT_BROAD_SPEED,

PORT_OUT_PKT_DIS_SPEEDZ

PORT_OUT_PKT_ERR_SPEED,

PORT_OUT_PKT_MULTI_SPEED,

PORT_OUT_PKT_NUNI_SPEED,

PORT_OUT_PKT_UNI_SPEED,

PORT_OUT_SPEED)

values

(v_date,

i,

i,

T,

32,

32,

32,

32,

32,

32,

32,

32,

32,

32,

32,

32,

32,

32);

commit;

endloop;

dbms」ock.sleep(600);--執(zhí)行完畢后停止10分鐘,便于在線搜集redo量

Exception

whenothersthen

dbms_output.put_line(substr(SQLERRMz1,1000));

EndP_GG_PERFORDATA;

(4)數(shù)據(jù)記錄腳本

每秒記錄142、146上端口性能表中已提交的數(shù)據(jù)量和差值。

CREATEORREPLACEPROCEDUREP_GG_TESTLOG(

/*

*COMPARETHEROWSCOUNTSBETWEEN146AND142FORTESTINGGOLDENGATESYNC;

?ITSHOULDBECALLEDBEFOREWHENTHEP_GG_PERFORDATAWILLBECALLED

*AUTHORZHOUJIONG2011-04-07

*/

p_marksinvarchar2defaultnull-formarkingwhichteststherecordsbelongto

)

AS

v_timestamptimestamp;

v_rows_146number:=0;

v_rows_142number:=0;

begin

foriin1..1200loop

v_timestamp:=systimestamp;

select(selectcount(*)fromper_test)numl,

(selectcount(*)from)num2

intov_rows_146,v_rows_142

fromdual;

insertinto

GGPERFORMANCETESTLOG(RECORDDATE,COUNTS142,COUNTS146,DIFFERENCE,MARKS)

values(v_timestamp,

v_rows_142,

v_rows_146,

v_rows_146-v_rows_142,

p_marks);

commit;

dbmsjock.sleep(l);

endloop;

Exception

whenothersthen

dbms_output.put_line(substr(SQLERRM,1,1000));

endP_GG_TESTLOG;

2.2.2GoldenGate配置

為記錄生成H勺trail文獻量,首先將兩端的mgr.rpm中的PURGEOLDEXTRACTSC參數(shù)注釋

掉,并重啟mgr進程。

(1)146上extract進程配置

ext3.prm

**

extractext3

SETENV(ORACLE_SID=ORCL)

useridCOSS360,passwordCOSS360

exttrailC:\ggoracle\dirdat\e3

dynamicresolution

gettruncates

TABLECOSS360.per_test,keycols(sampletime,objectid);

***/

pump3.prm

/***

extractpump3

useridCOSS360,passwordCOSS360

rmthost42,mg,port7801

rmttrailD:\ggoracle\dirdat\traill46\e3

NOPASSTHRU

gettruncates

tableCOSS360.res_p_s_*;

***/

(2)142上應(yīng)用進程配置

repl46e3.prm

?*

REPLICATrepl46e3

USERIDcoss3,PASSWORDcoss3

-SOURCEDEFSd:\ggoracle\dirdef\extl46\ext3.ref

assumetargetdefs

REPERRORdefault,discard

DISCARDFILEd:\ggoracle\log\repl48e3.dsc,append,megabytes200

gettruncates

HANDLECOLLISIONS

BATCHSQLBATCHESPERQUEUE200,OPSPERBATCH2023

MAPcoss360.per_test,TARSETcoss3.per_test,

keycols(sampletime,objectid);

***/

2.3測試環(huán)節(jié)

(i)清空兩端測試表

SQL>truncatetableper_test;

(2)清空歸檔和日志

sqlplussys/broada_plat@orcl142assysdba

3QL>altersystemswitchlogfile;

SQL>hostRMANtargetsys/broada_plat@orcll42

RMAN>deletenopromptarchivelogall;

RMAN>exit

SQL>connsys/broada_plat@orcll46assysdba

SQL>altersystemswitchlogfile;

SQL>hostRMANtargetsys/broada_plat@orcll46

RMAN>deletearchivelogall;

這里需要注意的是,extract進程應(yīng)當在歸檔清空后開始抓取,即建立extract進程應(yīng)當

在這個時間點之后begino重要了防止F1志大小記錄的不精確。

(3)啟動兩端GoldenGate進程,記錄初始trailfile大小

146:2K

142:2K

(4)執(zhí)行測試腳本

分別在兩個命令行窗口中執(zhí)行2個腳本,其中p_gg_testlog提前于P_GG_PERFORDATA執(zhí)行,

以記錄完整口勺測試信息:

SQL>execp_gg_testlog(p_marks=>'one')

SQL>execP_GG_PERFORDATA(p_looptime=>10000000);—實際執(zhí)行時間約1882秒

(5)測試數(shù)據(jù)生成結(jié)束、會話未關(guān)閉時(即10分鐘停止時間內(nèi))數(shù)據(jù)監(jiān)控

查看對應(yīng)SESSION

146usercommit:10000000次

142usercommit:10082次

備注:在應(yīng)用端配置了每1000條事務(wù)進行一次批量提交

會話REDO生成狀況記錄:

selects.sid,,round(s.value/1024/1024)"SizeMb"

fromv$sesstats,v$statnamen

wheres.statistic#=n.STATISTIC#

andlike'%redosize%'

orderby3desc;

記錄成果:

142上會話red。量(SID288)

1288redosize1679M

146上會話redo量(SID211)

1211redosize10037M

金山衛(wèi)士流量監(jiān)控中記錄142總下載流量為3.1Go

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論