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

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論