GoldenGate安裝部署與解決方案報(bào)告書(shū)_第1頁(yè)
GoldenGate安裝部署與解決方案報(bào)告書(shū)_第2頁(yè)
GoldenGate安裝部署與解決方案報(bào)告書(shū)_第3頁(yè)
GoldenGate安裝部署與解決方案報(bào)告書(shū)_第4頁(yè)
GoldenGate安裝部署與解決方案報(bào)告書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

...wd......wd......wd...GoldenGate安裝部署及解決方案目錄GoldenGate安裝部署及解決方案11、GoldenGate簡(jiǎn)介32、文檔約定和說(shuō)明53、GoldenGate軟件安裝63.1GoldenGate軟件安裝包下載63.2Windows下安裝73.3Linux和Unix下安裝84、GoldenGate同步根本配置94.1oracle之間同步和GoldenGate根基94.2oracle與db2同步174.3oracle與sybase同步185、GoldenGate同步方案195.1使用GoldenGate初始化加載195.2一對(duì)多數(shù)據(jù)同步〔播送復(fù)制〕215.3多對(duì)一數(shù)據(jù)同步〔集中復(fù)制〕225.4數(shù)據(jù)轉(zhuǎn)換和過(guò)濾235.5關(guān)于目標(biāo)端高數(shù)據(jù)安全性下的GoldenGate配置方案275.6GoldenGate雙向復(fù)制〔active-active〕306、GoldenGate數(shù)據(jù)同步性能測(cè)試336.1測(cè)試中主要監(jiān)測(cè)數(shù)據(jù)和監(jiān)測(cè)方式336.2測(cè)試腳本和GoldenGate配置346.3測(cè)試步驟386.4性能測(cè)試結(jié)果407、GoldenGate推薦配置427.1添加必要的環(huán)境參數(shù)427.2BATCHSQL參數(shù)427.3數(shù)據(jù)庫(kù)用戶(hù)密碼加密437.4trail再壓縮448、GoldenGateTroubleshooting458.1一些常用的進(jìn)程信息和日志的查看方式458.2解析trail文件45附:GoldenGate新版本的一個(gè)特性46參考文檔481、GoldenGate簡(jiǎn)介GoldenGate軟件是一種基于日志的構(gòu)造化數(shù)據(jù)復(fù)制軟件,它通過(guò)解析源數(shù)據(jù)庫(kù)在線日志或歸檔日志獲得數(shù)據(jù)的增刪改變化,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫(kù),實(shí)現(xiàn)源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)實(shí)時(shí)同步〔real-timedatasynchronize〕、雙活〔active-activehighavailability〕。GoldenGate軟件可以在異構(gòu)的IT根基構(gòu)造〔包括幾乎所有常用操作系統(tǒng)平臺(tái)和數(shù)據(jù)庫(kù)平臺(tái)〕之間實(shí)現(xiàn)大量數(shù)據(jù)亞秒一級(jí)的實(shí)時(shí)復(fù)制,其復(fù)制過(guò)程簡(jiǎn)圖如下:如上圖所示,GoldenGate的數(shù)據(jù)復(fù)制過(guò)程如下:利用捕捉進(jìn)程(CaptureProcess)在源系統(tǒng)端讀取OnlineRedoLog或ArchiveLog,然后進(jìn)展解析,只提取其中數(shù)據(jù)的變化如增、刪、改操作,并將相關(guān)信息轉(zhuǎn)換為GoldenGate自定義的中間格式存放在隊(duì)列文件〔trail〕中。再利用傳送進(jìn)程將隊(duì)列文件通過(guò)TCP/IP傳送到目標(biāo)系統(tǒng)。捕捉進(jìn)程在每次讀完log中的數(shù)據(jù)變化并在數(shù)據(jù)傳送到目標(biāo)系統(tǒng)后,會(huì)寫(xiě)檢查點(diǎn)〔checkpoint〕,記錄當(dāng)前完成捕捉的log位置,檢查點(diǎn)的存在可以使捕捉進(jìn)程在中止并恢復(fù)后可從檢查點(diǎn)位置繼續(xù)復(fù)制;目標(biāo)系統(tǒng)承受數(shù)據(jù)變化并緩存到GoldenGate隊(duì)列當(dāng)中,隊(duì)列為一系列臨時(shí)存儲(chǔ)數(shù)據(jù)變化的文件,等待投遞進(jìn)程讀取數(shù)據(jù);GoldenGate投遞進(jìn)程從隊(duì)列中讀取數(shù)據(jù)變化并創(chuàng)立對(duì)應(yīng)的SQL語(yǔ)句,通過(guò)數(shù)據(jù)庫(kù)的本地接口執(zhí)行,提交到數(shù)據(jù)庫(kù)成功后更新自己的檢查點(diǎn),記錄已經(jīng)完成復(fù)制的位置,數(shù)據(jù)的復(fù)制過(guò)程最終完成。由此可見(jiàn),GoldenGate是一種基于軟件的數(shù)據(jù)復(fù)制方式,它從數(shù)據(jù)庫(kù)的日志解析數(shù)據(jù)的變化〔數(shù)據(jù)量只有日志的四分之一左右〕。GoldenGate將數(shù)據(jù)變化轉(zhuǎn)化為自己的格式,直接通過(guò)TCP/IP網(wǎng)絡(luò)傳輸,無(wú)需依賴(lài)于數(shù)據(jù)庫(kù)自身的傳遞方式,而且可以通過(guò)高達(dá)9:1的壓縮率對(duì)數(shù)據(jù)進(jìn)展壓縮,可以大大降低帶寬需求。在目標(biāo)端,GoldenGate可以通過(guò)交易重組、分批加載等技術(shù)手段大大加快數(shù)據(jù)投遞的速度和效率,降低目標(biāo)系統(tǒng)的資源占用,可以在亞秒級(jí)實(shí)現(xiàn)大量數(shù)據(jù)的復(fù)制,并且目標(biāo)端數(shù)據(jù)庫(kù)是活動(dòng)的GoldenGate提供了靈活的應(yīng)用方案,基于其先進(jìn)、靈活的技術(shù)架構(gòu)可以根據(jù)用戶(hù)需求組成各種拓?fù)錁?gòu)造,如以下列圖:GoldenGate可以提供可靠的數(shù)據(jù)復(fù)制,主要表達(dá)在下面三點(diǎn):〔1〕保證事務(wù)一致性GoldenGate在災(zāi)備數(shù)據(jù)庫(kù)應(yīng)用復(fù)制數(shù)據(jù)庫(kù)交易的順序與在生產(chǎn)中心數(shù)據(jù)庫(kù)上的順序一樣,并且按照一樣的事務(wù)環(huán)境提交,確保在目標(biāo)系統(tǒng)上數(shù)據(jù)的完整性和讀一致性,為實(shí)時(shí)查詢(xún)和事務(wù)處理創(chuàng)造了條件?!?〕檢查點(diǎn)機(jī)制保障數(shù)據(jù)無(wú)喪失GoldenGate的抽取和復(fù)制進(jìn)程使用檢查點(diǎn)機(jī)制記錄完成復(fù)制的位置。對(duì)于抽取進(jìn)程,其檢查點(diǎn)記錄當(dāng)前已經(jīng)抽取日志的位置和寫(xiě)隊(duì)列文件的位置;對(duì)于投遞進(jìn)程,其檢查點(diǎn)記錄當(dāng)前讀取隊(duì)列文件的位置。檢查點(diǎn)機(jī)制可以保證在系統(tǒng)、網(wǎng)絡(luò)或GoldenGate進(jìn)程故障重啟后數(shù)據(jù)無(wú)喪失。〔3〕可靠的數(shù)據(jù)傳輸機(jī)制GoldenGate用應(yīng)答機(jī)制傳輸交易數(shù)據(jù),只有在得到確認(rèn)消息后才認(rèn)為數(shù)據(jù)傳輸完成,否則將自動(dòng)重新傳輸數(shù)據(jù),從而保證了抽取出的所有數(shù)據(jù)都能發(fā)送到備份端。數(shù)據(jù)傳輸過(guò)程中支持128位加密和數(shù)據(jù)壓縮功能。Oracle公司的GoldenGate產(chǎn)品,可以在異構(gòu)的IT根基構(gòu)造之間實(shí)現(xiàn)大量數(shù)據(jù)的秒一級(jí)的數(shù)據(jù)捕捉、轉(zhuǎn)換和投遞。目前最新版本為V.0。GoldenGate可以支持幾乎所有常用操作系統(tǒng)如和數(shù)據(jù)庫(kù)平臺(tái),如下表所示:操作系統(tǒng)數(shù)據(jù)庫(kù)MSNT,2000,XP,Linux,SunSolaris,HP-UX,IBMAIX,HPNonStop,TRU64,IBMz/OS,OS/390Oracle,DB2,MSSQLServer,MySQL,Enscribe,SQL/MP,SQL/MX,Sybase,Teradata,其他ODBC兼容數(shù)據(jù)庫(kù)2、文檔約定和說(shuō)明為統(tǒng)一表示命令和便于查看,對(duì)格式作如下約定:GG_HOME>表示從操作系統(tǒng)命令行〔cmd〕進(jìn)入GoldenGate安裝路徑下執(zhí)行命令。GGSCI>表示在GoldenGate命令環(huán)境中執(zhí)行命令。SQL>表示在數(shù)據(jù)庫(kù)下執(zhí)行SQL語(yǔ)句/******/表示配置文件內(nèi)容,/***不包含在內(nèi)。<>表示自定義參數(shù),如自定義表名<tablename>以下例如中假設(shè)無(wú)特殊說(shuō)明,GoldenGate使用的版本主要為11.1,局部使用10.4版本,除局部新特性,兩者根本無(wú)差異;GoldenGate命令行中的操作均是在mgr主進(jìn)程running時(shí)進(jìn)展,當(dāng)然,GoldenGate安裝局部除外。補(bǔ)充說(shuō)明:該文檔主要介紹GoldenGate根本使用、GoldenGate的各類(lèi)解決方案,以及以往本人在使用測(cè)試中總結(jié)的經(jīng)歷,文中的例子和執(zhí)行的命令都是參照官方文檔并親自測(cè)試執(zhí)行過(guò)。但因個(gè)人能力所限,錯(cuò)漏之處再所難免,文檔中也不可能覆蓋GoldenGate的方方面面。而且,因?yàn)镚oldenGate本身提供了大量的參數(shù),也不可能在這里一一列舉,本文檔中只舉例了常用的一些參數(shù)命令,關(guān)于各個(gè)參數(shù)的具體使用語(yǔ)法和作用,還請(qǐng)參照官方文檔《OracleGoldeGateReferenceGuide》。3、GoldenGate軟件安裝 在不同的操作系統(tǒng)和平臺(tái)上安裝GoldenGate,需要在官網(wǎng)下載對(duì)應(yīng)的版本。32位系統(tǒng)和64位系統(tǒng)的安裝介質(zhì)雖然不同,但是在同一OS上安裝方式是一樣的。 GoldenGate需要解析數(shù)據(jù)庫(kù)的日志文件,所以安裝位置必須要能訪問(wèn)到日志文件〔在線日志和歸檔文件〕,并具有相應(yīng)的權(quán)限。3.1GoldenGate軟件安裝包下載經(jīng)常有人問(wèn)我GoldenGate的下載地址,所以在這里專(zhuān)門(mén)說(shuō)明一下。 GoldenGate軟件的官方下載地址:://edelivery.oracle/目前只有這個(gè)地址能下到對(duì)應(yīng)32位操作系統(tǒng)的安裝介質(zhì)。 首頁(yè)如下:網(wǎng)頁(yè)開(kāi)頭點(diǎn)擊這個(gè)Continue進(jìn)入下載。首次進(jìn)入需要登記一些個(gè)人信息,如名字、公司等,然后下方選擇同意協(xié)議之類(lèi)的,點(diǎn)Continue進(jìn)入搜索。搜索時(shí)如下選擇:點(diǎn)GO,然后選擇對(duì)應(yīng)版本的OracleGoldenGate下載。GoldenGate安裝包一般只有幾十兆的大小,下載還是很快的。GoldenGate除了同步軟件這塊,還有其他相關(guān)的產(chǎn)品,比方OracleGoldenGateDirector,用于集中圖形化管理和監(jiān)控;OracleGoldenGateVeridata,用于兩端同步數(shù)據(jù)質(zhì)量檢驗(yàn)。在本文檔中暫不介紹。3.2Windows下安裝〔1〕安裝MicrosoftVisualC++2005SP1Windows操作系統(tǒng)需要首先下載安裝MicrosoftVisualC++2005SP1發(fā)行包〔注意該軟件也分32位和64位〕。〔2〕綠色安裝GoldenGate下載對(duì)應(yīng)平臺(tái)版本的GoldenGate安裝包,解壓。然后進(jìn)入操作系統(tǒng)命令行〔cmd〕,進(jìn)入GoldenGate解壓路徑下,執(zhí)行:GG_HOME>ggsci--進(jìn)入GoldenGate命令窗口模式GGSCI>CREATESUBDIRS--建設(shè)子目錄GGSCI>editparammgr--配置GoldenGate主進(jìn)程參數(shù)由于第一次執(zhí)行該命令,會(huì)提示創(chuàng)立mgr參數(shù)文件,點(diǎn)“是〞并在文本中輸入如下參數(shù):/***PORT7801--GoldenGate主進(jìn)程端口號(hào)DYNAMICPORTLIST7802-7820--GoldenGate為進(jìn)程間通訊動(dòng)態(tài)分配的端口段,注意這里如果分配的端口端少于extract-replicat進(jìn)程對(duì)的話,會(huì)導(dǎo)致局部進(jìn)程因通訊失敗而出錯(cuò)。***/保存,生成的參數(shù)文件保存在GG_HOME\dirprm下然后可以啟動(dòng)GoldenGate主控制進(jìn)程:GGSCI>startmgrGGSCI>infoall--查看進(jìn)程狀態(tài)如果進(jìn)程MANAGER狀態(tài)顯示為RUNNING則表示主進(jìn)程已在運(yùn)行。至此軟件安裝完成?!?〕管理GoldenGate服務(wù)在WINDOWS下還可以將GoldenGate主進(jìn)程作為系統(tǒng)服務(wù)進(jìn)展管理,如下配置:GGSCI>editparam./globals--配置全局參數(shù),注意前面的./說(shuō)明與其他參數(shù)文件位置不同,該參數(shù)文件是直接位于GoldenGate安裝路徑下的輸入:/***MGRSERVNAME<name>--GoldenGate主進(jìn)程端口號(hào),<name>為自定義的系統(tǒng)服務(wù)名***/然后退出GGSCI命令行:GGSCI>exitGG_HOME>installaddserviceaddevents--創(chuàng)立服務(wù),完成后可以直接進(jìn)服務(wù)進(jìn)展管理WINDOWS刪除GoldenGate服務(wù):GG_HOME>installdeleteeventsdeleteservice--對(duì)應(yīng)刪除服務(wù)操作或者在注冊(cè)表刪除:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services一般服務(wù)會(huì)以一樣的名字在這里顯示一個(gè)主健,直接刪除相關(guān)的鍵值便可3.3Linux和Unix下安裝〔1〕檢查必需的lib包 下載對(duì)應(yīng)平臺(tái)版本的GoldenGate,解壓。在解壓路徑下執(zhí)行: [root@GG_HOME]>#lddggsci 將列出所有需要的lib和當(dāng)前缺少的。GoldenGate在Linux和Unix下安裝,需要安裝ORACLE的lib環(huán)境以及$ORACLE_HOME/lib下的幾個(gè)包,所以必須安裝在Oracle之后,而且確保在環(huán)境變量中參加:exportLD_LIBRARY_PATH=$ORACLE_HOME/lib〔2〕綠色安裝GoldenGate 在解壓路徑下執(zhí)行./ggsci進(jìn)展接口命令行,[root@GG_HOME]>#./ggsci--進(jìn)入GoldenGate命令窗口模式GGSCI>CREATESUBDIRS--建設(shè)子目錄GGSCI>editparammgr--配置GoldenGate主進(jìn)程參數(shù)由于第一次執(zhí)行該命令,會(huì)提示創(chuàng)立mgr參數(shù)文件,點(diǎn)“是〞并在文本中輸入如下參數(shù):/***PORT7801--GoldenGate主進(jìn)程端口號(hào)DYNAMICPORTLIST7802-7820--GoldenGate為進(jìn)程間通訊動(dòng)態(tài)分配的端口段,注意這里如果分配的端口端少于extract-replicat進(jìn)程對(duì)的話,會(huì)導(dǎo)致局部進(jìn)程因通訊失敗而出錯(cuò)。***/保存,生成的參數(shù)文件保存在GG_HOME\dirprm下然后可以啟動(dòng)GoldenGate主控制進(jìn)程:GGSCI>startmgrGGSCI>infoall--查看進(jìn)程狀態(tài)如果進(jìn)程MANAGER狀態(tài)顯示為RUNNING則表示主進(jìn)程已在運(yùn)行。至此軟件安裝完成。和Windows下安裝的主要區(qū)別是需要確認(rèn)必需的lib包,進(jìn)入GGSCI接口命令行后的操作都是一致的。4、GoldenGate同步根本配置GoldenGate支持目前大局部主流數(shù)據(jù)庫(kù),這也是它的優(yōu)勢(shì)之一。下面列舉了Oracle、Db2、Sybase之間的同步。同步測(cè)試的準(zhǔn)備工作中,有一局部是共通的,如下:在源端和目標(biāo)端建設(shè)一樣構(gòu)造的兩個(gè)表,建設(shè)主鍵。保證復(fù)制的對(duì)象在一開(kāi)場(chǎng)是一致的。保證沒(méi)有相關(guān)對(duì)象的觸發(fā)器〔會(huì)導(dǎo)致數(shù)據(jù)沖突的那些〕或設(shè)置失效。數(shù)據(jù)庫(kù)需要開(kāi)啟必須的日志模式。不同數(shù)據(jù)庫(kù)的配置差異主要在這一步。源端和目標(biāo)端都需要安裝相應(yīng)版本的GoldenGate軟件,并分配一個(gè)有DBA權(quán)限的數(shù)據(jù)庫(kù)用戶(hù)給GoldenGate用以連接數(shù)據(jù)庫(kù)。備注:分配給GoldenGate的用戶(hù)一般情況下并不需要完全的DBA權(quán)限,在官方文檔上有詳細(xì)的權(quán)限需求說(shuō)明,但是完全按照那個(gè)配置比擬繁瑣。額外的,如果數(shù)據(jù)庫(kù)使用ASM時(shí),需要sysdba權(quán)限。4.1oracle之間同步和GoldenGate根基4.1.1Oracle數(shù)據(jù)庫(kù)設(shè)置首先安裝好ORACLE,設(shè)置好ORACLE_SID,ORACLE_HOME等環(huán)境變量。當(dāng)然,推薦的做法是在每個(gè)進(jìn)程配置文件里都加上指定的環(huán)境變量參數(shù),在后面優(yōu)化配置中進(jìn)展說(shuō)明。Oracle數(shù)據(jù)庫(kù)需要開(kāi)啟歸檔日志,并開(kāi)啟最小附加日志模式。SQL>selectsupplemental_log_data_minfromv$database;--查看是否開(kāi)啟了最小附加日志模式SQL>alterdatabaseaddsupplementallogdata;--開(kāi)啟最小附加日志模式實(shí)際生產(chǎn)應(yīng)用中,最好同時(shí)翻開(kāi)ORACLE的強(qiáng)制日志模式,以防止源數(shù)據(jù)庫(kù)因直接路徑加載忽略redo生成而導(dǎo)致這局部數(shù)據(jù)無(wú)法同步:SQL>selectforce_loggingfromv$database;SQL>Alterdatabaseforcelogging;光開(kāi)啟最小附加日志模式還不夠,還需要翻開(kāi)表級(jí)的補(bǔ)全日志,可以在GoldenGate中使用addtrandata命令強(qiáng)制重做日志記錄主鍵值,以保證在目標(biāo)端能成功復(fù)制:GGSCI>dbloginuseridddw,passwordddw--GoldenGate中登錄OARCLE數(shù)據(jù)庫(kù)GGSCI>addtrandataddw.<tablename>--表名可以使用通配符GGSCI>addtrandatacoss3.per_test,nokey,cols(sampletime,objectid)--無(wú)主鍵指定字段補(bǔ)全的例如也可以在數(shù)據(jù)庫(kù)中翻開(kāi):SQL>altertable<tablename>addsupplementallogdata(primarykey)columns;千萬(wàn)不要小看這步日志設(shè)置,其實(shí)在GoldenGate的配置中,這步是最容易出錯(cuò)的環(huán)節(jié)。如果開(kāi)啟DDL復(fù)制做冗災(zāi)備份,最好直接在數(shù)據(jù)庫(kù)級(jí)別翻開(kāi)補(bǔ)全日志:SQL>alterdatabaseaddsupplementallogdata(primarykey,unique,foreignkey)columns;檢查一下,全是YES就OK了〔整個(gè)數(shù)據(jù)庫(kù)級(jí)別補(bǔ)全〕SQL>selectsupplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_uifromv$database;4.1.2關(guān)于Oracle補(bǔ)全日志補(bǔ)充說(shuō)明Oracle日志〔redolog〕一般用于實(shí)例恢復(fù)和介質(zhì)恢復(fù),但是如果需要靠日志復(fù)原完整的DML操作信息〔比方Logmnr、Streams和這里的Goldengate〕,默認(rèn)記錄的日志量還不夠。比方一個(gè)UPDATE的操作,默認(rèn)redo只記錄了rowid以及被修改的字段信息,但這里GoldenGate復(fù)原這個(gè)事務(wù),因?yàn)椴皇歉鶕?jù)rowid而是SQL層面根據(jù)唯一鍵值來(lái)定位記錄,所以還需要將主鍵或者其他字段的信息附加到日志中去。要往日志中增加這些額外字段信息的操作,就是開(kāi)啟補(bǔ)全日志,即AddSupplementalLogging。翻開(kāi)補(bǔ)全日志,會(huì)使數(shù)據(jù)庫(kù)的日志量增加,所以只翻開(kāi)需要的級(jí)別和對(duì)象即可。Oracle補(bǔ)全日志可以在數(shù)據(jù)庫(kù)級(jí)別設(shè)置,也可以在表級(jí)別設(shè)置。在數(shù)據(jù)庫(kù)級(jí)別中,補(bǔ)全日志按補(bǔ)全的信息量,對(duì)應(yīng)好幾個(gè)級(jí)別:最小附加日志〔Minimalsupplementallogging〕:是開(kāi)啟logmnr的最低日志要求,提供了行鏈接〔chainedrows〕和多種數(shù)據(jù)存儲(chǔ)〔比方聚簇表、索引組織表〕的信息。在Oracle9.2之后的版本中,默認(rèn)都不開(kāi)啟。主鍵補(bǔ)全〔Primarykeysupplementallogging〕:在日志中補(bǔ)全所有主鍵列。如果表中無(wú)主鍵,則補(bǔ)全一個(gè)非空唯一索引列;如果非空唯一索引鍵也沒(méi),那么會(huì)補(bǔ)全除了LOB和LONG類(lèi)型字段以外的所有列,這時(shí)就和下面的所有補(bǔ)全一樣了。唯一鍵補(bǔ)全〔Uniquekeysupplementallogging〕:當(dāng)唯一鍵列或位圖索引列被修改時(shí),在日志中補(bǔ)全所有唯一鍵列或位圖索引列。翻開(kāi)唯一鍵補(bǔ)全也會(huì)同時(shí)翻開(kāi)主鍵補(bǔ)全。注意這個(gè)級(jí)別是需要條件觸發(fā)的。外鍵補(bǔ)全〔ForeignKeysupplementallogging〕:當(dāng)外鍵列被修改時(shí),將在日志中補(bǔ)全所有外鍵列。這個(gè)級(jí)別也是需要條件觸發(fā)的。所有補(bǔ)全〔Allsupplementallogging〕:在日志中補(bǔ)全所有字段〔排除LOB和LONG類(lèi)型〕。這里對(duì)于補(bǔ)全日志的詳細(xì)操作語(yǔ)句不做一一說(shuō)明。數(shù)據(jù)庫(kù)級(jí)別中的5個(gè)類(lèi)型中,除了最小附加日志級(jí)別,都可以在表級(jí)進(jìn)展設(shè)置。除此之外,表級(jí)還可以明確指定需要補(bǔ)全的列。Oracle表級(jí)補(bǔ)全日志需要在最小補(bǔ)全日志翻開(kāi)的情況下才起作用,即假設(shè)一個(gè)數(shù)據(jù)庫(kù)沒(méi)有開(kāi)最小補(bǔ)全日志或之前dropsupplementallogdata操作則即便指定了表級(jí)補(bǔ)全日志,實(shí)際在重做日志輸出的過(guò)程中描述的記錄仍只記錄rowid和相關(guān)列值。而要關(guān)閉最小補(bǔ)全日志,也必須首先關(guān)閉數(shù)據(jù)庫(kù)級(jí)別的其他補(bǔ)全級(jí)別后,才能關(guān)閉。 所以在GoldenGate中,對(duì)于Oracle數(shù)據(jù)庫(kù)的日志補(bǔ)全要求,至少是翻開(kāi)最小附加日志和主鍵補(bǔ)全。主鍵補(bǔ)全只要在需要同步的表上開(kāi)啟即可。當(dāng)然GoldenGate的addtrandata語(yǔ)法中也可以指定補(bǔ)全的列,這和Oracle表級(jí)補(bǔ)全日志的功能完全一致。畢竟,日志還是由數(shù)據(jù)庫(kù)生成的,GoldenGate并不能直接控制日志的生成方式和規(guī)則,只能根據(jù)所捕獲的數(shù)據(jù)庫(kù)的日志規(guī)則而來(lái)。不同的數(shù)據(jù)庫(kù),日志補(bǔ)全的規(guī)則也會(huì)不同。以上局部?jī)?nèi)容參考自《Oracle10gR2Utilities》SupplementalLogging局部4.1.3dml同步一對(duì)一的實(shí)時(shí)同步簡(jiǎn)單配置同步流程如圖:〔1〕源數(shù)據(jù)庫(kù)端添加提取進(jìn)程〔extractprocess〕GGSCI>addextractextl,tranlog,beginnow--新增抽取進(jìn)程extl,基于日志方式,立即生效需要注意的是,GoldenGate中的進(jìn)程名最長(zhǎng)只能8個(gè)字符。注意,如果是在RAC環(huán)境下,需要再加上THREADS<n>指定提取的日志THREADGGSCI>addextractextl,tranlog,beginnow,THREADS<n>GGSCI>editparamextl--生成并編輯同名配置文件/***extractextl--抽取進(jìn)程名useridddw@orcl,passwordddw--連接本機(jī)DB的帳號(hào)密碼rmthost4,mgrport7801--目標(biāo)數(shù)據(jù)庫(kù)服務(wù)器地址和GG服務(wù)端口號(hào)rmttraild:\tools\GG\gg10g\dirdat\rl--遠(yuǎn)程隊(duì)列的位置〔下一步建的東西〕dynamicresolution--優(yōu)化參數(shù),動(dòng)態(tài)分析表構(gòu)造gettruncates--抓取truncate數(shù)據(jù)tableddw.aatest;--需要抽取的表,可以使用通配符***/然后給這個(gè)提取進(jìn)程創(chuàng)立遠(yuǎn)端隊(duì)列,即圖中的RMTTRAIL:GGSCI>addrmttraild:\tools\GG\gg10g\dirdat\rlextractextl需要注意的是,這里最后的名稱(chēng)rl〔可以自定義,字母或數(shù)字〕是指以后生成的trail文件都會(huì)以rl開(kāi)頭,如rl000001,這個(gè)文件頭名稱(chēng)最長(zhǎng)只能2個(gè)字符。如果需要在文件級(jí)別區(qū)分隊(duì)列,建議將隊(duì)列創(chuàng)立于于不同的目錄下。開(kāi)啟這個(gè)提取進(jìn)程:GGSCI>startextlGGSCI>infoall--查看所有進(jìn)程狀態(tài)此時(shí)extl進(jìn)程running則表示已成功運(yùn)行,這時(shí)開(kāi)場(chǎng)會(huì)在前面指定的目標(biāo)端隊(duì)列位置生成trail文件。如果進(jìn)程出錯(cuò),可以使用viewreportextl查看錯(cuò)誤信息。〔2〕目標(biāo)數(shù)據(jù)庫(kù)端添加復(fù)制應(yīng)用進(jìn)程〔replicatprocess〕在目標(biāo)端GoldenGate命令行中配置復(fù)制進(jìn)程:GGSCI>addreplicatreplexttraild:\tools\GG\gg10g\dirdat\rl,beginnow,nodbcheckpoint–新增復(fù)制進(jìn)程,使用對(duì)應(yīng)的隊(duì)列rl,即刻開(kāi)場(chǎng),使用文件檢查點(diǎn)GGSCI>editparamrepl--配置復(fù)制進(jìn)程參數(shù)/***replicatrepl--復(fù)制進(jìn)程名useridddw@orcl,passwordddw--目標(biāo)數(shù)據(jù)庫(kù)的帳號(hào)密碼assumetargetdefs--兩臺(tái)數(shù)據(jù)庫(kù)數(shù)據(jù)構(gòu)造一致則使用此參數(shù)reperrordefault,discard--如果復(fù)制數(shù)據(jù)出錯(cuò)則忽略discardfileD:\repsz.dsc,append,megabytes100--錯(cuò)誤信息寫(xiě)入XXXX文件,追加模式,最大100mgettruncates--復(fù)制truncate操作mapddw.aatest,targetddw.aatest_1;--映射關(guān)系,注意target前必須留一個(gè)空格--mapddw.aatest,targetddw.aatest_1,keycols(name),where(TYPE1="1")--加兩橫杠在配置文件中進(jìn)展注釋?zhuān)籯eycols指定唯一鍵;where篩選數(shù)據(jù)***/開(kāi)啟復(fù)制進(jìn)程:GGSCI>startrepl至此,一個(gè)最簡(jiǎn)單的同步配置完成,對(duì)于源數(shù)據(jù)庫(kù)相應(yīng)表的insert,update,delete和truncate操作都將通過(guò)日志捕獲并同步到目標(biāo)數(shù)據(jù)庫(kù)。使用datapump參加datapump后的數(shù)據(jù)傳輸?shù)牧鞒蹋哼@里的datapump與ORACLE10g推出的數(shù)據(jù)泵不是一個(gè)概念。在GoldenGate中,datapump相當(dāng)于一個(gè)次級(jí)提取進(jìn)程〔secondaryextract〕。在上面演示的同步流程中,提取進(jìn)程直接將提取的redo信息經(jīng)過(guò)處理后放置到了目標(biāo)端服務(wù)器上,當(dāng)兩者之間的網(wǎng)絡(luò)出現(xiàn)故障時(shí),會(huì)因無(wú)法生成trail文件而導(dǎo)致提取進(jìn)程崩潰,錯(cuò)誤提示類(lèi)似如下:2010-11-1210:01:21GGSERROR150TCP/IPerror10061(由于目標(biāo)機(jī)器積極拒絕,無(wú)法連接。);retriesexceeded.2010-11-1210:01:21GGSERROR190PROCESSABENDING.而參加datapump后,主提取進(jìn)程〔即第一個(gè)extract〕首先將trail生成在本地,然后datapump讀取本地trail再發(fā)送到目標(biāo)服務(wù)器,即便網(wǎng)絡(luò)故障,主提取進(jìn)程仍然能隨著事務(wù)生成trail文件,而datapump則會(huì)暫時(shí)停頓傳輸,等待網(wǎng)絡(luò)通暢后在將堆積的本地trail文件發(fā)送至目標(biāo)服務(wù)器,從而實(shí)現(xiàn)了斷點(diǎn)傳輸?shù)墓δ?。在?shí)際應(yīng)用中,每一個(gè)同步流程都應(yīng)該配置datapump以應(yīng)對(duì)網(wǎng)絡(luò)問(wèn)題。參加datapump的配置:將前面extl參數(shù)文件中的/***rmthost4,mgrport7801rmttraild:\tools\GG\gg10g\dirdat\rl***/替換為/***exttraild:\tools\GG\gg10g\dirdat\l1--本地隊(duì)列文件生成位置***/配置datapump進(jìn)程:GGSCI>ADDEXTRACTpump1,EXTTRAILSOURCE<local_trail>,BEGIN<time>--<local_trail>即是對(duì)應(yīng)extl配置文件中定義的d:\tools\GG\gg10g\dirdat\l1GGSCI>editparampump1/***extractpump1useridddw,passwordddwrmthost4,mgrport7801rmttraild:\tools\GG\gg10g\dirdat\r1PASSTHRU|NOPASSTHRU--直通模式或普通模式gettruncatestableddw.bbtest;***/直通模式用在兩邊表名、列名一致,可以直接映射的情況,不需要額外配置;普通模式可以配置表名列名自定義映射,可以加FILTER、transformation等,需要配置一個(gè)數(shù)據(jù)定義文件〔data-definitionsfile〕。然后修改原先為提取進(jìn)程配置遠(yuǎn)端隊(duì)列位置:GGSCI>deletermttraild:\tools\GG\gg10g\dirdat\rlextractextlGGSCI>addrmttraild:\tools\GG\gg10g\dirdat\rlextractpump1然后啟動(dòng)extl和pump進(jìn)程就OK了。使用數(shù)據(jù)定義文件GoldenGate數(shù)據(jù)定義文件〔data-definitionsfile〕,主要用于不同數(shù)據(jù)源之間〔比方下面的Oracle與DB2之間的同步〕,進(jìn)展數(shù)據(jù)同步時(shí)用來(lái)轉(zhuǎn)換數(shù)據(jù)格式。數(shù)據(jù)定義文件主要包含表名、字段名、字段類(lèi)型、字段長(zhǎng)度和偏移量。利用GoldenGate的defgen工具生成一個(gè)數(shù)據(jù)定義文件〔data-definitionsfile〕,大致步驟如下:〔1〕創(chuàng)立DEFGEN工具的參數(shù)文件〔2〕運(yùn)行DEFGEN工具生成數(shù)據(jù)定義文件〔3〕配置GG進(jìn)程識(shí)別定義文件例子:GGSCI>editparamdefgen--創(chuàng)立DEFGEN工具的參數(shù)文件/***DEFSFILE<full_pathname>--指定由DEFGEN生成的數(shù)據(jù)定義文件的全路徑和名稱(chēng)[{SOURCEDB|TARGETDB}<dsn>,]--oracle不需要配置這個(gè)參數(shù)[USERID<user>[,PASSWORD<password>]]--DB2不需要配置PASSWORDTABLE<owner>.<table>--分析指定表生成配置文件***/類(lèi)似如下〔ORACLE〕:/***DEFSFILEGG_HOME\dirdef\extdb.refUSERIDddw,PASSWORDddwTABLEddw.aatest;***/然后退出GGSCI,在GG安裝路徑下運(yùn)行DEFGEN工具:GG_HOME>defgenparamfiledirprm/defgen.prm配置文件默認(rèn)生成在GG_HOME\dirdef下,不要去手動(dòng)修改。如果對(duì)應(yīng)表的表構(gòu)造發(fā)生更改,需要重新生成這個(gè)配置文件。然后將生成的配置文件拷貝至目標(biāo)服務(wù)器的GG_HOME\dirdef下。修改復(fù)制進(jìn)程repl參數(shù)文件:GGSCI>editparamrepl將原先的assumetargetdefs參數(shù)替換為sourcedefsGG_HOME\dirdef\extdb.refGGSCI>stopreplGGSCI>startrepl數(shù)據(jù)定義文件的配置完成。配置進(jìn)程檢查點(diǎn)〔checkpoint〕檢查點(diǎn)記錄了進(jìn)程讀寫(xiě)的位置信息用以數(shù)據(jù)恢復(fù),目的是為了防止進(jìn)程因系統(tǒng)、網(wǎng)絡(luò)崩潰而導(dǎo)致的數(shù)據(jù)喪失,對(duì)于GoldenGate保證數(shù)據(jù)同步過(guò)程中數(shù)據(jù)不喪失非常重要。GoldenGate的檢查點(diǎn)由一個(gè)內(nèi)部進(jìn)程自動(dòng)控制,與數(shù)據(jù)庫(kù)檢查點(diǎn)的概念類(lèi)似。提取進(jìn)程的檢查點(diǎn)記錄它在數(shù)據(jù)源中的讀取位置和隊(duì)列的寫(xiě)出位置,復(fù)制進(jìn)程的檢查點(diǎn)記錄它讀取隊(duì)列的位置。每條提取或復(fù)制進(jìn)程都有自己對(duì)應(yīng)的檢查點(diǎn)信息。當(dāng)GoldenGate的進(jìn)程重啟時(shí),由它所記錄的檢查點(diǎn)決定需要讀取的隊(duì)列位置。GoldenGate的檢查點(diǎn)信息有兩種存放方式:〔1〕默認(rèn)存放在GGHOME\dirchk下的文件中,一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)文件。提取進(jìn)程只能使用這種模式。不需要特殊配置?!?〕存放在數(shù)據(jù)庫(kù)指定的表中,需要進(jìn)展如下配置:首先在./globals參數(shù)文件中參加:/***CHECKPOINTTABLE[<owner>.<table>]--指定的檢查點(diǎn)記錄表***/然后運(yùn)行:GGSCI>DBLOGIN[SOURCEDB<dsn>][,USERID<db_user>[,PASSWORD<pw>]]GGSCI>ADDCHECKPOINTTABLE[<owner>.<table>]--生成這個(gè)檢查點(diǎn)記錄表在新增復(fù)制進(jìn)程時(shí)可以在添加時(shí)指定checkpointtable[<owner>.<table>]替代nodbcheckpoint,使用數(shù)據(jù)庫(kù)記錄檢查點(diǎn)信息。ORACLE官方文檔中,比擬推薦將復(fù)制進(jìn)程的檢查點(diǎn)信息存放到數(shù)據(jù)庫(kù)表中進(jìn)展管理,認(rèn)為在某些情況下能促進(jìn)數(shù)據(jù)恢復(fù)。并指出檢查點(diǎn)信息量非常小,而且是進(jìn)展記錄更新而非記錄插入,一個(gè)進(jìn)程只對(duì)應(yīng)一條記錄,在它特殊的檢查點(diǎn)處理機(jī)制下不會(huì)對(duì)數(shù)據(jù)庫(kù)造成影響。個(gè)人猜測(cè)是當(dāng)目標(biāo)數(shù)據(jù)庫(kù)崩潰復(fù)原后〔特別是在不完全恢復(fù)的情況下〕,檢查點(diǎn)信息能同數(shù)據(jù)庫(kù)一起復(fù)原,在數(shù)據(jù)上能利用數(shù)據(jù)庫(kù)事務(wù)性與數(shù)據(jù)庫(kù)保持一致,從而在數(shù)據(jù)庫(kù)正常翻開(kāi)后能繼續(xù)進(jìn)展數(shù)據(jù)同步。但實(shí)際上并不必要,因?yàn)閿?shù)據(jù)庫(kù)故障的情況多種多樣,就算檢查點(diǎn)同步恢復(fù)后,也不能保證直接就能啟動(dòng)GoldenGate進(jìn)程。4.1.3ddl同步GoldenGate的DDL同步只支持兩邊一致的數(shù)據(jù)庫(kù),限制條件較多〔如不能進(jìn)展字段映射、轉(zhuǎn)換等〕,具體可以參考官方文檔。DDL的抓取不是通過(guò)日志抓取來(lái)捕獲的,而是通過(guò)觸發(fā)器來(lái)實(shí)現(xiàn),所以對(duì)源數(shù)據(jù)庫(kù)的性能影響要比單純的數(shù)據(jù)抓取要大很多,可謂屏棄了GoldenGate的優(yōu)勢(shì)。盡量不要使用GoldenGate的DDL復(fù)制功能,在大多數(shù)業(yè)務(wù)系統(tǒng)中,實(shí)際上不會(huì)有頻繁的數(shù)據(jù)庫(kù)構(gòu)造變動(dòng),完全可以通過(guò)手工的方式進(jìn)展維護(hù)。確實(shí)有大量DDL操作的環(huán)境,如果可以,還是推薦物理DG之類(lèi)的替換方案;確實(shí)要使用GoldenGate的DDL復(fù)制,那么請(qǐng)?jiān)敿?xì)參考官方文檔的限制和說(shuō)明。--以上主要為個(gè)人意見(jiàn),有不同看法的請(qǐng)無(wú)視開(kāi)啟DDL復(fù)制的根本配置步驟為:〔1〕關(guān)閉ORACLE的回收站功能。〔2〕選擇一個(gè)數(shù)據(jù)庫(kù)schema存放支持DDL的GoldenGate對(duì)象,運(yùn)行相應(yīng)創(chuàng)立腳本?!?〕編輯globals參數(shù)文件?!?〕修改extl和repl的配置文件具體操作步驟:〔1〕關(guān)閉數(shù)據(jù)庫(kù)回收站:SQL>altersystemsetrecyclebin=offscope=both;〔2〕編輯globals參數(shù)文件:GGSCI>editparam./globals添加以下內(nèi)容后保存:GGSCHEMAddw--標(biāo)明支持DDL的GG對(duì)象存放在哪個(gè)schema下〔3〕執(zhí)行創(chuàng)立腳本:首先需要命令行進(jìn)入GG安裝目錄下,然后再運(yùn)行sqlplus執(zhí)行腳本,如果不進(jìn)入目錄下腳本執(zhí)行會(huì)報(bào)錯(cuò)〔應(yīng)該是由于GG腳本中子腳本嵌套使用相對(duì)路徑的問(wèn)題所造成〕。SQL>@marker_setup.sql--提示輸入目標(biāo)schemaSQL>@ddl_setup.sql--提示輸入目標(biāo)schema,輸入initialsetup最后輸入yesSQL>@role_setup.sqlSQL>grantGGS_GGSUSER_ROLEtoddw;--不進(jìn)展該步賦權(quán)后面起進(jìn)程會(huì)報(bào)錯(cuò)SQL>@ddl_enable.sql--使觸發(fā)器生效〔4〕修改提取進(jìn)程和復(fù)制進(jìn)程的配置文件,分別參加ddlincludeall屬性。此時(shí)repl必須指定assumetargetdefs屬性,這說(shuō)明只有兩邊數(shù)據(jù)庫(kù)構(gòu)造一致的情況下才可以啟用DDL復(fù)制。另外,開(kāi)啟DDL同步不能再只映射單表了,對(duì)整個(gè)模式下的對(duì)象都有效。參加DDL復(fù)制之后,數(shù)據(jù)復(fù)制的lag明顯增加了。去除數(shù)據(jù)庫(kù)中DDL復(fù)制的設(shè)置在實(shí)際測(cè)試中,由于我在同一個(gè)數(shù)據(jù)庫(kù)中進(jìn)展映射,映射表構(gòu)造不一致,導(dǎo)致進(jìn)程報(bào)了一系列的錯(cuò)誤。這個(gè)時(shí)候需要把通過(guò)腳本創(chuàng)立的GG對(duì)象中的數(shù)據(jù)清空,安裝目錄下只提供了去除對(duì)象的腳本,可以如下操作:首先要求把所有的GG進(jìn)程停掉,包括mgr進(jìn)程SQL>@ddl_disable.sql--首先使DDL觸發(fā)器失效SQL>@ddl_remove.sqlSQL>@marker_remove.sqlrole_setup.sql沒(méi)有對(duì)應(yīng)的去除腳本,但是這塊不影響配置信息的去除然后重新再創(chuàng)立腳本。4.2oracle與db2同步設(shè)置DB2數(shù)據(jù)庫(kù)參數(shù):db2connectto<database>user<username>using<password>--DB2命令行工具登陸DB2db2getdbcfgfor<databasename>--查看數(shù)據(jù)庫(kù)參數(shù)配置db2updatedbcfgfor<databasename>usingLOGRETAINON--設(shè)置LOGRETAIN參數(shù)db2updatedbcfgfor<databasename>usingUSEREXITON--設(shè)置USEREXIT參數(shù)設(shè)置完后的參數(shù)配置相關(guān)顯示如下:Logretainforrecoverystatus=RECOVERYUserexitforloggingstatus=YES重啟數(shù)據(jù)庫(kù)并進(jìn)展全庫(kù)備份:db2stopforcedb2startdb2backupdb<database>指定歸檔路徑:〔OVERFLOWLOGPATH參數(shù)〕db2connectto<database>user<username>using<password>db2updatedbcfgusingoverflowlogpath"<path>"GoldenGate中執(zhí)行addtrandata補(bǔ)全日志:GGSCI>dbloginsourcedbsampleuseriddb2admin,passworddb2admin--除oracle外的數(shù)據(jù)庫(kù)都需要指定sourcedb參數(shù),指定數(shù)據(jù)庫(kù)名稱(chēng)GGSCI>addtrandatadb2admin.<tablename>其他的同步配置與Oracle中一樣,需要注意的是進(jìn)程配置文件中登陸DB2的局部都需要指定sourcedb這個(gè)參數(shù)〔ORACLE不需要,指定了反而報(bào)錯(cuò)〕。還有就是復(fù)制進(jìn)程的配置文件中一般不能指定assumetargetdefs參數(shù),因?yàn)椴皇菢?gòu)造一致的數(shù)據(jù)庫(kù),需要通過(guò)defgen工具生成數(shù)據(jù)定義文件進(jìn)展映射。4.3oracle與sybase同步Sybase數(shù)據(jù)庫(kù)設(shè)置使用sybase的SQLAdvantage,用sa用戶(hù)登錄,執(zhí)行dbccsettrunc('ltm',valid)修改參數(shù)。GoldenGate中連接SybaseGGSCI>dbloginsourcedbzhoubaseuseridsapasswordsasasa同樣做如下設(shè)置GGSCI>addtrandata<user>.<tablename>其他配置和Oracle中一樣。需要注意的是,Sybase是個(gè)區(qū)分大小寫(xiě)的數(shù)據(jù)庫(kù)〔sqlserver同樣〕。而Oracle不區(qū)分大小寫(xiě),這就導(dǎo)致了表和字段在復(fù)制進(jìn)程映射的時(shí)候,容易因大小寫(xiě)問(wèn)題導(dǎo)致映射失敗。解決方法是在表名外加上雙引號(hào)或者單引號(hào),參照如下復(fù)制進(jìn)程的配置文件內(nèi)容:/***replicatrepsysourcedefsd:\tools\GG\gg10g\dirdef\extsy.refUSERIDddw,PASSWORDddwreperrordefault,discarddiscardfileD:\repsy.dsc,append,megabytes100MAP“dbo.BBTEST〞,TARGET“DDW.AASYBASE〞;--引號(hào)區(qū)分大小寫(xiě)***/5、GoldenGate同步方案 GoldenGate工具雖小,但它提供表級(jí)字段級(jí)同步映射,而且同步性能優(yōu)異、資源消耗低,使它的靈活性很強(qiáng),可以提供多種數(shù)據(jù)同步、冗災(zāi)的解決方案。5.1使用GoldenGate初始化加載 這里所指的GoldenGate初始化加載,只是它指提供的directload方式,因?yàn)槠渌麕追N官方介紹的初始化方式要么需要借助其他數(shù)據(jù)庫(kù)工具〔如extract->SQL*Loader〕,要么中間走了完全沒(méi)必要的步驟導(dǎo)致性能很差〔如extract->file->replicat方式〕,都不算純粹的GoldenGate方式。初始化加載架構(gòu):上圖中,顯示了初始化加載啟用了兩條同步路線:上面一條是真正的initialload,負(fù)責(zé)將源數(shù)據(jù)端的數(shù)據(jù)一次性發(fā)送到目標(biāo)數(shù)據(jù)庫(kù);下面一條,其實(shí)就是普通的GoldenGate同步進(jìn)程,負(fù)責(zé)抓取初始化加載時(shí)源端數(shù)據(jù)庫(kù)進(jìn)展的在線數(shù)據(jù)變化。因?yàn)樵趯?shí)際應(yīng)用中,往往需要在生產(chǎn)庫(kù)〔源數(shù)據(jù)庫(kù)〕不停機(jī)的狀態(tài)下,將數(shù)據(jù)加載到備用數(shù)據(jù)庫(kù)〔目標(biāo)數(shù)據(jù)庫(kù)〕中并應(yīng)用實(shí)時(shí)同步,在數(shù)據(jù)初始化的過(guò)程中,生產(chǎn)庫(kù)將繼續(xù)進(jìn)展正常的事務(wù)操作,所以此時(shí)需要有抓取進(jìn)程在初始化時(shí)開(kāi)場(chǎng)將這些變化捕獲,以免數(shù)據(jù)喪失。實(shí)際部署時(shí)需要注意正確的執(zhí)行順序,大致可以分為以下幾步:源端和目標(biāo)端創(chuàng)立配置各個(gè)同步進(jìn)程。開(kāi)啟源端同步抓取進(jìn)程〔圖上的ChangeExtract〕,開(kāi)場(chǎng)捕獲變化。開(kāi)啟初始化進(jìn)程〔圖上的Initial-LoadExtract〕,開(kāi)場(chǎng)數(shù)據(jù)初始化加載。等初始化加載完畢,開(kāi)啟目標(biāo)端復(fù)制應(yīng)用進(jìn)程〔圖上的ChangeReplicat〕,開(kāi)場(chǎng)實(shí)時(shí)同步應(yīng)用。在目標(biāo)端復(fù)制應(yīng)用進(jìn)程〔圖上的ChangeReplicat〕中,需要在參數(shù)文件中配置HANDLECOLLISIONS參數(shù),以防止重復(fù)應(yīng)用第2和第3步之間的數(shù)據(jù)變化,因?yàn)檫@局部數(shù)據(jù)已經(jīng)包含在初始化加載中傳到目標(biāo)數(shù)據(jù)庫(kù)中了。在這里需要特別提醒的一個(gè)概念上的問(wèn)題,GoldenGate的初始化同步不會(huì)也不需要去初始化目標(biāo)端的SCN號(hào)。這個(gè)問(wèn)題在我與多位數(shù)據(jù)庫(kù)DBA的交流中發(fā)現(xiàn),他們往往以為GoldenGate是通過(guò)SCN來(lái)判斷數(shù)據(jù)的應(yīng)用情況的。GoldenGate的同步與Streams不同,它不需要依賴(lài)兩端數(shù)據(jù)庫(kù)保持一致的SCN來(lái)應(yīng)用同步,實(shí)際上它只在抓取時(shí)可能會(huì)與數(shù)據(jù)庫(kù)的SCN有關(guān)聯(lián)〔抓取時(shí)可以指定源數(shù)據(jù)庫(kù)的特定SCN號(hào)開(kāi)場(chǎng)解析日志〕,在trail傳輸以及目標(biāo)端應(yīng)用時(shí),都和源端數(shù)據(jù)庫(kù)的SCN毫無(wú)關(guān)系。它的實(shí)質(zhì)是通過(guò)自己的一套隊(duì)列文件檢查點(diǎn)機(jī)制來(lái)實(shí)現(xiàn)隊(duì)列數(shù)據(jù)的管理,在目標(biāo)端則通過(guò)數(shù)據(jù)的唯一鍵來(lái)定位數(shù)據(jù)行,trail文件最終解析成SQL語(yǔ)句在目標(biāo)端數(shù)據(jù)庫(kù)執(zhí)行而實(shí)現(xiàn)數(shù)據(jù)的應(yīng)用。所以這里的初始化加載,完全可以使用其他數(shù)據(jù)庫(kù)工具來(lái)實(shí)現(xiàn),比方說(shuō)exp/imp、SQL*Loader、RMAN復(fù)制數(shù)據(jù)庫(kù)等。 以下為一個(gè)簡(jiǎn)單的初始化加載的例子,對(duì)于實(shí)時(shí)同步配置同上面介紹的是一樣的,這里不再說(shuō)明,只列出初始化加載局部的進(jìn)程配置。5.1.1GoldenGate初始化加載例如〔directload方式〕源端添加提取進(jìn)程:GGSCI>addextractext1,sourceistable--沒(méi)有tranlog,意味著不是通過(guò)日志方式;沒(méi)有beginXXX,表示還未啟動(dòng);使用sourceistable參數(shù)不會(huì)使用檢查點(diǎn)機(jī)制配置文件如下:/***extractext1useridddw,passwordddwrmthost4,mgrport7401rmttaskreplicat,grouprept1--注意是rmttask,指定目標(biāo)復(fù)制進(jìn)程名tableddw.test;***/不需要為該進(jìn)程添加遠(yuǎn)端隊(duì)列〔rmttrail〕。目標(biāo)端添加復(fù)制應(yīng)用進(jìn)程:addreplicatrept1,specialrun--表示一次性加載/***replicatrept1assumetargetdefsuseridddw,passwordddwreperrordefault,discarddiscardfileD:\reptmy.dsc,append,megabytes100INSERTAPPEND--使用直接路徑加載,提高加載速度HANDLECOLLISIONS--當(dāng)目標(biāo)端已有數(shù)據(jù)時(shí),略過(guò)重復(fù)數(shù)據(jù)錯(cuò)誤MAPddw.test,TARGETddw.test1;***/注意,這里的extract和replicat進(jìn)程添加完后在infoall中看不到這個(gè)進(jìn)程,但是viewreport可以跟蹤到。要開(kāi)場(chǎng)加載,在源端執(zhí)行:GGSCI>startexttmy目標(biāo)端的replicat進(jìn)程不需要去啟動(dòng),會(huì)自動(dòng)進(jìn)展數(shù)據(jù)應(yīng)用。5.1.2與Oracle數(shù)據(jù)泵數(shù)據(jù)加載速度的比擬 按照5.6.1例如中的配置,對(duì)一張600萬(wàn)行數(shù)據(jù)的測(cè)試表進(jìn)展初始化加載,完全加載完畢大約需要50分鐘。 使用Oracle10g的數(shù)據(jù)泵工具對(duì)同樣的表,通過(guò)DBLink的方式進(jìn)展初始化加載:C:\>impdpddw/ddw@orcljob_name=zhouimptables=testCONTENT=DATA_ONLYnetwork_link="DB148.REGRESS.RDBMS.DEV.US.ORACLE"只需要1分半鐘就導(dǎo)完了600萬(wàn)行數(shù)據(jù)。兩者的執(zhí)行效率差異太大了。 所以在一般情況下,盡量使用其他高效的數(shù)據(jù)庫(kù)傳輸工具來(lái)完成初始化加載,而不要用GoldenGate提高的初始化功能。5.2一對(duì)多數(shù)據(jù)同步〔播送復(fù)制〕一對(duì)多數(shù)據(jù)同步實(shí)現(xiàn)架構(gòu):GoldenGate對(duì)于多對(duì)一的實(shí)現(xiàn)方式,就是對(duì)于同一個(gè)源建設(shè)多個(gè)提取進(jìn)程同步進(jìn)展,也就是說(shuō),對(duì)應(yīng)不同的目標(biāo)端,分別配置同步進(jìn)程進(jìn)展同步。配置過(guò)程與前面是一樣的。這里的多個(gè)目標(biāo)端,有可能對(duì)應(yīng)不同的數(shù)據(jù)庫(kù),也有可能是同一個(gè)庫(kù)中的不同對(duì)象。如果是同步到同一個(gè)庫(kù)中的不同對(duì)象,除了分別配置同步進(jìn)程以外,有時(shí)候也可以在一個(gè)進(jìn)程中完成,比方,可以在復(fù)制端如此配置:/***REPLICATrep146e1USERIDcoss3,PASSWORDcoss3assumetargetdefsREPERRORdefault,discardDISCARDFILEd:\ggoracle\log\rep146e1.dsc,append,megabytes200HANDLECOLLISIONSMAPddw.test,TARGETddw.test1;MAPddw.test,TARGETddw.test2;--同一張表同時(shí)對(duì)應(yīng)多個(gè)表MAPddw.test,TARGETddw.test3;***/當(dāng)然,如果同步數(shù)據(jù)負(fù)載較大的情況下,還是建議在進(jìn)程級(jí)別分開(kāi)。5.3多對(duì)一數(shù)據(jù)同步〔集中復(fù)制〕多對(duì)一數(shù)據(jù)同步架構(gòu):多對(duì)一數(shù)據(jù)同步實(shí)現(xiàn)方式同一對(duì)多,也是將extract-replicat將進(jìn)程拆分成多個(gè)。多對(duì)一同步需要注意的是,所有源端和目標(biāo)端的表都應(yīng)該使用一致的主鍵約束,而且在不同的源端不應(yīng)該對(duì)同一鍵值的數(shù)據(jù)進(jìn)展維護(hù)。也就是說(shuō),需要在業(yè)務(wù)上將不同源的數(shù)據(jù)隔離開(kāi)來(lái),以防止對(duì)同一數(shù)據(jù)的覆蓋更改等問(wèn)題。一般用于維護(hù)業(yè)務(wù)的區(qū)域性數(shù)據(jù)、然后統(tǒng)一同步到業(yè)務(wù)中心數(shù)據(jù)源的業(yè)務(wù)場(chǎng)景。 還有一個(gè)需要注意的方面是TRUCATE的捕獲,在多對(duì)一的配置下應(yīng)防止捕獲。因?yàn)镚oldenGate處理TRUNCATE同步是直接傳輸了這個(gè)語(yǔ)句,并不會(huì)提供具體刪除的數(shù)據(jù)信息〔沒(méi)有REDO也無(wú)法提供〕,所以無(wú)論哪個(gè)源端執(zhí)行了TRUNCATE,如果同步到了目標(biāo)端,都會(huì)直接把目標(biāo)端的表數(shù)據(jù)直接刪光,無(wú)論目標(biāo)數(shù)據(jù)是否是來(lái)源于這個(gè)源,造成數(shù)據(jù)的不一致。5.4數(shù)據(jù)轉(zhuǎn)換和過(guò)濾GlodenGate中支持字段映射、數(shù)據(jù)篩選轉(zhuǎn)換,以及調(diào)用執(zhí)行數(shù)據(jù)庫(kù)腳本或者SQL語(yǔ)句等,在一定條件下,甚至可以實(shí)現(xiàn)實(shí)時(shí)ETL的功能。5.4.1字段映射GoldenGate中字段的映射一般配置在復(fù)制應(yīng)用端的MAP參數(shù)中,字段映射要求兩邊盡量一致的字段的類(lèi)型,當(dāng)然也允許CHAR<->VARCHAR之類(lèi)的轉(zhuǎn)換。對(duì)于不同字段類(lèi)型的映射,最好詳細(xì)參考GoldenGate官方文檔以得到足夠的支持信息,并做好測(cè)試驗(yàn)證以防止數(shù)據(jù)喪失等。以下是字段映射的配置例子:例子1:/***MAPddw.a1test,targetddw.a2test,--target前一定要留個(gè)空格,否則會(huì)報(bào)錯(cuò)COLMAP(id=id,type1=type1,sell_date1=sell_date2);--字段映射配置***/例子2:/***MAPddw.a1test,targetddw.a2test,COLMAP(USEDEFAULTS,sell_date1=sell_date2);--USEDEFAULTS表示自動(dòng)映射同名字段MAPddw.a3test,targetddw.a4test;--不同的表映射,不同的mapMAP“ddw.a5test〞,target“ddw.a6test〞;--在有些大小寫(xiě)敏感的數(shù)據(jù)源需要引號(hào)區(qū)分大小寫(xiě)***/例子3:/***MAPddw.a1test,targetddw.a2test,COLMAP(USEDEFAULTS,num=111,name="abc",now_date=@DATENOW());--字段指定固定值,注意字符值加引號(hào),數(shù)字值不可加引號(hào);@DATENOW()表示當(dāng)前系統(tǒng)時(shí)間***/例子4:/***MAPddw.a1test,targetddw.a2test,COLMAP(USEDEFAULTS,transaction_date=@DATE(“YYYY-MM-DD〞,“YY〞,YEAR,“MM〞,MONTH,“DD〞,DAY),);--多個(gè)字符字段整合轉(zhuǎn)換為目標(biāo)端的一個(gè)時(shí)間字段***/在這里順便插入一個(gè)很容易出錯(cuò)的表映射例子:/***mapddw.a*,targetddw.*;--通配符表示所有a開(kāi)頭的表進(jìn)展映射,注意的是target后面的表名千萬(wàn)不能也寫(xiě)成ddw.a*,不然會(huì)被映射成目標(biāo)端aa開(kāi)頭的表***/5.4.2字段和數(shù)據(jù)篩選 GoldenGate中字段的篩選一般都在TABLE參數(shù)中配置〔目標(biāo)端是在MAP參數(shù)〕。一般推薦在源端extract進(jìn)程配置文件中配置,這樣可以有效得減小trail文件的大小,減小網(wǎng)絡(luò)負(fù)載。以下是一些篩選配置例子〔只列出配置文件的TABLE參數(shù)局部〕?!?〕字段篩選:/***tableddw.aatest,FETCHCOLS(id,name,type1,sell_date,value1);--說(shuō)明只提取這些字段***/使用指定字段做主鍵:/***tableddw.aatest,KEYCOLS(client_taq,id);***/〔2〕數(shù)據(jù)過(guò)濾:使用WHERE條件:/***tableddw.aatest,where(type1="1"ANDtype2="2");--說(shuō)明只提取表中type1=’1并type2=’2’的記錄***/如下提取非NULL值:/***tableddw.aatest,where(value<>@NULL);***/使用FILTER參數(shù):/***tableddw.aatest,FILTER((num1*num2)>1000);***/與WHERE條件不同的是,F(xiàn)ILTER只能后面數(shù)字,字符型需要轉(zhuǎn)換后才可以使用,如:/***tableddw.aatest,FILTER(@STRFIND(NAME,"JOE")>0).***/FILTER參數(shù)的優(yōu)勢(shì)是還可以指定只在某種DML操作下才過(guò)濾,比方:/***tableddw.aatest,FILTER((ONUPDATE,ONDELETE,(num1*num2)>1000);--只在UPDATE和DELETE操作時(shí)過(guò)濾num1*num2不大于1000的值***/5.4.3調(diào)用執(zhí)行SQL或存儲(chǔ)過(guò)程在GlodenGate指令庫(kù)中有個(gè)SQLEXEC指令,可以用來(lái)調(diào)用執(zhí)行數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程或者自定義的SQL語(yǔ)句,可以指定輸入?yún)?shù),輸出參數(shù)可以作為字段與目標(biāo)表映射。使用這個(gè)指令,可以實(shí)現(xiàn)將源表做簡(jiǎn)單連接〔tablejoin〕然后將連接后結(jié)果同步到目標(biāo)表,到達(dá)簡(jiǎn)單的轉(zhuǎn)換目的。在復(fù)制端配置如下〔以SQL為例,procedure是一樣的,改成過(guò)程名即可〕:/***replicatrepjoinuseridddw,passwordddwsourcedefsd:\tools\GG\gg10g\dirdef\extjo.refreperrordefault,discarddiscardfileD:\repjoin.dsc,append,megabytes100gettruncatesmapddw.a1test,targetddw.a12test,sqlexec(idtestid,--自定義執(zhí)行語(yǔ)句的唯一標(biāo)識(shí)query"selectname,value1froma2testwherename_id=:id_param",--:id_param為輸入?yún)?shù)params(id_param=NAME_ID)),--將輸入?yún)?shù)指定為源表中某列 如果沒(méi)有輸入?yún)?shù),則這局部改為NOPARAMScolmap(USEDEFAULTS,name=,value1=testid.value1);--新的字段映射,表示語(yǔ)句輸出參數(shù)name***/上面的配置案例,實(shí)現(xiàn)了將ddw.a1test表中name_id字段通過(guò)字典表a2test轉(zhuǎn)換為對(duì)應(yīng)的真實(shí)name值,并增加了一個(gè)value字段,然后映射到ddw.a12test表中。ddw.a12test表中的記錄實(shí)際就是前面ddw.a1test表和a2test表連接生成的記錄。但是,這里存在一個(gè)問(wèn)題:字典表a2test是在源數(shù)據(jù)庫(kù)呢,還是在目標(biāo)數(shù)據(jù)庫(kù)顯而易見(jiàn),配置在復(fù)制進(jìn)程的配置文件中,那條語(yǔ)句是在目標(biāo)端數(shù)據(jù)庫(kù)執(zhí)行的〔如果執(zhí)行procedure那么這個(gè)過(guò)程也必須建設(shè)在目標(biāo)端〕,字典表a2test在目標(biāo)端〔在我這個(gè)例子中〕。而且同步是由表ddw.a1test上的事務(wù)觸發(fā)的,字典表a2test中的數(shù)據(jù)無(wú)論怎么改都不會(huì)引起這個(gè)數(shù)據(jù)同步。這種情況下,可以考慮將字典表a2test也進(jìn)展同步,來(lái)解決這個(gè)問(wèn)題。SQLEXEC指令也可以在提取進(jìn)程中使用。如果有輸出參數(shù)作為額外的映射列,這個(gè)時(shí)候需要將查詢(xún)結(jié)果也一并傳輸過(guò)去??梢酝ㄟ^(guò)參數(shù)TOKENS進(jìn)展傳遞,然后再在目標(biāo)端映射。以下對(duì)TOKENS的使用進(jìn)展說(shuō)明。使用USERTOKENSAREA可以使用TOKENS參數(shù),在提取端將自定義的數(shù)據(jù)放入trail中,傳遞到目標(biāo)端,映射到目標(biāo)端的表中。這里針對(duì)前面SQLEXEC提出的問(wèn)題例如。提取端extract的TABLE配置:/***TABLEddw.test,sqlexec(idsqlid,query"selectnode_idcodeidfromic_sysnodewhererownum=1",NOPARAMS),TOKENS(TK_CODE=sqlid.codeid);--將提取端查詢(xún)出的node_id字段值,標(biāo)識(shí)為T(mén)K_CODE放入ddw.test表的trail文件中,一起傳遞***/目標(biāo)端replicat的MAP配置:/***MAPddw.test,TARGETddw.testother,COLMAP(USEDEFAULTS,SITE_CODE=@TOKEN("TK_CODE"));--將TK_CODE值映射給目標(biāo)字段***/5.4.4數(shù)據(jù)庫(kù)DML操作過(guò)濾 數(shù)據(jù)庫(kù)DML操作過(guò)濾,這里是指選擇是否捕獲INSERT、UPDATE、DELETE。在某些業(yè)務(wù)場(chǎng)景下,只需要捕獲某一種特定的DML操作即可,比方業(yè)務(wù)數(shù)據(jù)庫(kù)往數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)同步,往往只需要捕獲INSERT操作,而對(duì)于UPDATE、DELETE則不允許同步目標(biāo)庫(kù)。 默認(rèn)下,INSERT、UPDATE、DELETE都是捕獲的,可以分別在Extract進(jìn)程的配置文件中參加IGNOREINSERTS、IGNOREUPDATES、IGNOREDELETES進(jìn)展忽略。當(dāng)然,在這種情況下,業(yè)務(wù)上需要做相應(yīng)的限制。比方忽略DELETE操作時(shí),源數(shù)據(jù)庫(kù)應(yīng)制止重復(fù)插入DELETE掉的鍵值。 參數(shù)使用例如〔表示只捕獲INSERT〕: /***IGNOREUPDATESIGNOREDELETES ***/ TRUNCATE是一種特殊的刪除操作,默認(rèn)配置下GoldenGate不進(jìn)展捕獲,一般需要在Extract進(jìn)程的配置文件中參加GETTRUNCATES來(lái)指定捕獲。5.5關(guān)于目標(biāo)端高數(shù)據(jù)安全性下的GoldenGate配置方案5.5.1配置方案因?yàn)镚oldenGate的標(biāo)準(zhǔn)配置下,是通過(guò)源端抓取進(jìn)程向目標(biāo)端發(fā)送隊(duì)列文件的方式傳輸數(shù)據(jù)的,但在實(shí)際應(yīng)用中,會(huì)出現(xiàn)這么一個(gè)關(guān)于安全方面的問(wèn)題:如果上級(jí)機(jī)器的安全策略不允許外網(wǎng)直接往里發(fā)送數(shù)據(jù),如何進(jìn)展數(shù)據(jù)同步配置 GoldenGate是有提供一個(gè)由目標(biāo)端主動(dòng)“申請(qǐng)〞源端進(jìn)展數(shù)據(jù)傳輸?shù)姆绞?,以保證內(nèi)外網(wǎng)不同安全域下的數(shù)據(jù)安全保障。解決方案的體系架構(gòu)如下:主要是通過(guò)目標(biāo)端一個(gè)額外的aliasExtract進(jìn)程,實(shí)現(xiàn)由目標(biāo)端〔可信任域〕主動(dòng)請(qǐng)求、向源端〔未信任域〕提供數(shù)據(jù)傳輸?shù)倪B接的過(guò)程。具體的驅(qū)動(dòng)模式如下〔翻譯自官方文檔,可能表述得不準(zhǔn)確〕:?jiǎn)?dòng)可信任域的aliasExtract進(jìn)程可信任域的GGSCI向未信任域mgr主進(jìn)程發(fā)送消息,以啟動(dòng)相應(yīng)的passiveExtract進(jìn)程。消息包含可信任域的主機(jī)名或IP,以及一個(gè)可信任域mgr主進(jìn)程的端口號(hào)。未信任域承受消息后,啟動(dòng)passiveExtract進(jìn)程,并翻開(kāi)一個(gè)可用的端口號(hào)。未信任域mgr主進(jìn)程將該端口號(hào)返回給可信任域的GGSCI??尚湃斡虻腉GSCI向本地mgr主進(jìn)程發(fā)送請(qǐng)求以啟動(dòng)Collector進(jìn)程。本地mgr啟動(dòng)Collector進(jìn)程,通過(guò)未信任域提供的端口號(hào)對(duì)未信任域進(jìn)展監(jiān)聽(tīng)。Collector進(jìn)程翻開(kāi)與未信任域passiveExtract進(jìn)程的連接。同步數(shù)據(jù)通過(guò)連接從未信任域passiveExtract進(jìn)程傳輸?shù)紺ollector進(jìn)程,然后寫(xiě)入本地trail,被Replicat進(jìn)程應(yīng)用。這里未信任域的passiveExtract進(jìn)程,即是源端的datapumpExtract進(jìn)程,所以只需要改動(dòng)源端的datapumpExtract進(jìn)程、新增一個(gè)aliasExtract進(jìn)程即可〔Collector進(jìn)程由目標(biāo)端mgr自動(dòng)配置〕。5.5.2配置案例1.源端配置〔146上〕〔1〕創(chuàng)立提取進(jìn)程〔與普通情況下完全一樣〕GGSCI>addextractexta,tranlog,beginnow配置文件exta.prm:/***extractextaSETENV(ORACLE_SID=ORCL)useridCOSS360,passwordCOSS360exttrailC:\ggoracle\dirdat\eadynamicresolutiongettruncatesTABLECOSS360.per_test,keycols(sampletime,objectid);***/創(chuàng)立本地隊(duì)列:GGSCI>ADDEXTTRAILC:\ggoracle\dirdat\ea,extractexta〔2〕pump進(jìn)程〔passiveextract進(jìn)程〕創(chuàng)立passivepump:GGSCI>ADDEXTRACTpumpa,exttrailsourceC:\ggoracle\dirdat\ea,beginnow,passive,desc"passivepump"--passive表示為passiveextractprocess配置文件pumpa.prm:/***extractpumpauseridCOSS360,passwordCOSS360--rmthost42,mgrport7801--原先的rmthost需要被注釋RMTHOSTOPTIONScompress--passiveextract專(zhuān)有參數(shù)rmttrailD:\ggoracle\dirdat\trail146\eaNOPASSTHRUgettruncatesTABLECOSS360.per_test,keycols(sampletime,objectid);***/創(chuàng)立遠(yuǎn)端隊(duì)列:addrmttrailD:\ggoracle\dirdat\trail146\eaextractpumpa2.目標(biāo)端配置〔142上〕〔1〕添加aliadextract進(jìn)程aliasExtract進(jìn)程不需要配置文件添加語(yǔ)法:ADDEXTRACT<group>,RMTHOST{<hostname>|<IPaddress>},{MGRPORT<port>}|{PORT<port}[,RMTNAME<name>][,DESC“<description>〞]此處測(cè)試的創(chuàng)立命令如下:GGSCI>addextractext146pa,rmthost46,mgrport7801,rmtnamepumpa--需要定義源端的地址、端口,而且如果aliasextract名稱(chēng)和passiveextract名稱(chēng)不同,需要特別指定rmtname〔2〕添加應(yīng)用進(jìn)程〔與普通情況下完全一樣〕GGSCI>addreplicatrep146eaexttrailD:\ggoracle\dirdat\trail146\ea,nodbcheckpoint配置文件rep146ea.prm:/***REPLICATrep146eaUSERIDcoss3,PASSWORDcoss3assumetargetdefsREPERRORdefault,discardDISCARDFILEd:\ggoracle\log\rep146ea.dsc,append,megabytes200gettruncatesHANDLECOLLISIONSBATCHSQLBATCHESPERQUEUE200,OPSPERBATCH2000MAPcoss360.per_test,TARGETcoss3.per_test,keycols(sampletime,objectid);***/3.同步進(jìn)程的啟動(dòng)和關(guān)閉注意,passiveextract(這里是pumpa)不應(yīng)該被手動(dòng)啟動(dòng)〔手動(dòng)也無(wú)法啟動(dòng)〕。在上面的進(jìn)程創(chuàng)立和配置完成后,正確的啟動(dòng)方式如下:〔1〕源端startexta,目標(biāo)端startrep146ea〔2〕目標(biāo)端startext146pa〔aliasExtract〕〔3〕在正確的配置下,pumpa會(huì)自動(dòng)啟動(dòng)。Pumpa啟動(dòng)后,同步正常開(kāi)場(chǎng)。 同樣,進(jìn)程關(guān)閉時(shí),無(wú)論在源端關(guān)閉passiveextract或是在目標(biāo)端關(guān)閉aliasextract,對(duì)應(yīng)的aliasextract和passiveextract都會(huì)自動(dòng)關(guān)閉。5.6GoldenGate雙向復(fù)制〔active-active〕雙向復(fù)制系統(tǒng)架構(gòu)如下: GoldenGate雙向復(fù)制,意即兩端數(shù)據(jù)庫(kù)互為源數(shù)據(jù),無(wú)論在哪一端上對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)展操作,都將同步應(yīng)用到另一端。5.6.1雙向復(fù)制的注意點(diǎn)1.防止數(shù)據(jù)循環(huán) 雙向復(fù)制中,最主要的問(wèn)題是需要防止數(shù)據(jù)的循環(huán)應(yīng)用。在GoldenGate中,需要從兩方面進(jìn)展預(yù)防:〔1〕防止Extract進(jìn)程抓取Replicat進(jìn)程的SQL操作。在默認(rèn)配置下,GoldenGate的Extract進(jìn)程會(huì)忽略捕獲由Replicat執(zhí)行的SQL操作〔Teradata除外,需要進(jìn)展額外配置〕,所以這局部一般不需要額外設(shè)置?!?〕使Extract進(jìn)程識(shí)別本地Replicat執(zhí)行的DML事務(wù),并進(jìn)展忽略。這步在Oracle〔10gandlater〕中的配置為在Extract進(jìn)程參加參數(shù):TRANLOGOPTIONSEXCLUDEUSER<username>進(jìn)展排除。不同的數(shù)據(jù)庫(kù)這里需要配置的參數(shù)不同。如果是Oracle9i或之前的版本,需要配置tracetable。2.防止數(shù)據(jù)沖突 由于是雙向復(fù)制,那么當(dāng)兩端都對(duì)同一數(shù)據(jù)進(jìn)展操作時(shí),就會(huì)發(fā)生沖突。比方同時(shí)對(duì)某行數(shù)據(jù)進(jìn)展修改,修改的操作將會(huì)被覆蓋〔視LAG以及事務(wù)的先后〕;又比方兩端插入或刪除一樣鍵值的數(shù)據(jù)。 對(duì)于這類(lèi)數(shù)據(jù)沖突,最好是在業(yè)務(wù)應(yīng)用層解決。比方,可以劃分兩端數(shù)據(jù)庫(kù)應(yīng)用的業(yè)務(wù)范圍,一局部數(shù)據(jù)只在一端修改維護(hù),另一端則修改維護(hù)其他數(shù)據(jù);在兩端定義不同的鍵值生成策略;關(guān)注同步表上的觸發(fā)器和ondeletecascade約束。也可以借助GoldenGate的映射和過(guò)濾功能,對(duì)于兩端同步的數(shù)據(jù)進(jìn)展區(qū)分。 總之,在配置雙向復(fù)制環(huán)境時(shí),需要綜合考慮當(dāng)時(shí)業(yè)務(wù)情況,一般都需要在應(yīng)用層進(jìn)展適當(dāng)?shù)男薷?,以防止?shù)據(jù)沖突帶來(lái)的數(shù)據(jù)喪失和不一致。5.6.2雙向配置例如 這個(gè)例如中,ggdba用戶(hù)作為GoldenGate專(zhuān)用用戶(hù),ddw和ddws分別為兩端數(shù)據(jù)庫(kù)需要同步的schema〔也可以同名,這里是為了便于區(qū)別〕,通過(guò)在兩端Extract中配置排除ggdba的操作防止循環(huán)應(yīng)用。以下ddw結(jié)尾的進(jìn)程均在ddw用戶(hù)所在數(shù)據(jù)庫(kù),ddws結(jié)尾的進(jìn)程均在ddws用戶(hù)所在數(shù)據(jù)庫(kù)。(1)ddw==>ddws添加提取進(jìn)程:GGSCI>addextractextddw,tranlog,begin

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論