[發表日期:2012/5/5]
前言
複寫是指將資料和資料庫物件從某個資料庫複製和散發到另一個資料庫,然後在兩個資料庫間進行同步處理,以達到資料一致性的一種行為,藉由複寫我們可以將資料透過區域網路、廣域網路、無線網路等散發到不同位置、不同的遠端各機器。
Golden Gate簡介
Golden Gate可以運作於各種常用的作業系統平台與大多數資料庫,此篇文章筆者選擇介紹Linux平台搭配Oracle資料庫來作為說明。
Golden Gate軟體是一種基於資料庫日誌的結構化資料複製軟體,它透過解析來源資料庫的線上日誌或歸檔日誌來取得資料的增加刪減等變化,再將這些變化執行到目標資料庫,以達到兩邊資料庫的資料同步,其複製過程如下圖:
《圖一》
- 首先利用capture process在來源端資料庫讀取Online redo log/Archived log,接著解析,只提取其中資料的變化(增、刪、改)並將資訊轉換成Golden Gate自定義的格式存放進queue中,再利用傳送的process通過TCP/IP傳送到目標主機,同時建立檢查點,記錄當下完成補捉log的位置,檢查點可以使捕捉process在中止並恢復之後可以從檢查點記錄處之後繼續複製。
- 目的主機在接收資料變化之後暫存到Golden Gate的queue中,並等待deliver process讀取資料。
- Deliver process從queue中讀取資料變化並創建對應的SQL語句,接著透過資料庫的本機介面執行,提交到資料庫成功後更新檢查點記錄已經完成複製的位置,至此複寫的流程完成。
此外Golden Gate在傳輸資料變化時無須依賴資料庫自身的傳遞方式並且可以通過高達9:1的壓縮率對資料進行壓縮,藉此大大減低頻寬的使用,在目的端也就由交易重組、分批載入等技術加快資料投遞的速度和效率,降低目的系統的資源佔用,也提供各種靈活的應用方案,如一對一、一對多、分層結構、雙向複製、多對一等各種拓墣結構,在資料複製上也有以下三點特色:
- 保證事務一致性
在來源資料庫與目的資料庫上面交易的順序相同並且按照相同的事務環境提交,確保在目標系統上資料的完整性和一致性。
- 檢查點機制保證無丟失
藉由檢查點的建立記錄已經取抽和寫入的文件位置,可以保證當系統、網路或是Golden Gate故障重啟之後資料無丟失。
- 可靠的資料傳輸機制
利用應答機制傳輸交易資料,只有在得到確認的信息之後才認為完成資料傳輸,否則將重新傳輸,進而保證所有資料都可發送到目的端,資料傳輸過程中支援128位元加密和資料壓縮功能。
Golden Gate安裝Golden Gate可以在下面網址取得:
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html 下載完成之後,將檔案複製到來源和目的兩台機器上面並且解壓縮完畢之後就可以開始進行設定,來源與目的資料庫安裝方法相同,以下僅介紹其中一台:
- 建立資料夾與解壓縮
- 編輯.bash_profile
加入相對應的GGATE與LD_LIBRARY_PATH,此處以筆者測試機器路徑為主,實際路徑設定需依狀況做修改。
- 使用ggsci 工具建立必要的目錄
進入ggsci介面後輸入”create subdirs”便會自動建立相應目錄,如此便完成Golden Gate的安裝。
以上步驟來源與目的端皆須執行
Golden Gate設定Golden Gate主要是抓取來源端redo進行分析,將取得的資料傳送到目的端藉此實現資料同步,因此為了讓Golden Gate能夠正常運作,來源端必進行設定。首先資料庫需要啟用archivelog歸檔模式,此部份就不再另做介紹。
- 建立資料庫user ggate
SQL> create user ggate identified by password default tablespace users temporary tablespace temp;
SQL> grant connect,resource,unlimited tablespace to ggate;
SQL> grant execute on utl_file to ggate;
- 配置複製的DDL
切換目錄到Golden Gate安裝目錄下,並進入Oracle執行以下sql檔案marker_setup.sql、ddl_setup.sql、role_setup.sql、ddl_enable.sql
SQL>@marker_setup.sql
SQL>@ ddl_setup.sql
SQL>@ role_setup.sql
SQL> grant GGS_GGSUSER_ROLE to ggate;
SQL>@ ddl_enable.sql
- 配置manager
來源與目的端分別執行以下步驟:
進入ggsci介面,並設定manger使用的port
接著在檔案中輸入”PORT 7809”(此port可自行修改)
啟動manger: start manager
- 配置來源端複製隊列
進入ggsci介面並輸入以下指令
GGSCI > add extract ext_name, tranlog,begin now
GGSCI > add extrail ext_path, extract ext_name
GGSCI > edit params ext_name
編輯ext設定檔時輸入以下內容
extract ext_name
userid ggate@Oracle_Link, password ggate_password
rmthost 目的端IP, mgrport 目的端manger_port
rmttrail ext_path
ddl include mapped objname 要複製的user.object_name;
table要複製的user.table_name;
- 配置目的端同步隊列
進入ggsci介面並輸入以下指令
GGSCI > edit params ./GLOBAL #加入以下內容
GGSCHEMA ggate
CHECKPOINTTABLE ggate.checkpoint
GGSCI > dblogin userid ggate password ggate_password #用ggate登入DB
GGSCI > add checkpointtable ggate.checkpoint #建立checkpoint
GGSCI > add replicat rep_name, exttrail rep_path, checkpointtable ggate.checkpoint
GGSCI > edit params rep_name #加入以下內容
replicat rep_name
ASSUMETARGETDEFS
userid ggate,password ggate_password
discardfile $GGATE/dirdat/rep1_discard.txt, append, megabytes 10
DDL
map 來源端user.*, target 目的端user.*;
- 啟動同步
分別進入來源與目的端的ggsci介面
來源端:
GGSCI > start extract ext_name #啟動複製隊列
GGSCI > info all #觀看狀態
目的端:
GGSCI > start replicat rep_name #啟動同步隊列
GGSCI > info all #觀看狀態
至此即完成Golden Gate的配置
測試:
在來源端建立一個table
撿查目的端:
確認馬上同步,Golden Gate安裝設定成功。
總結利用Golden Gate我們可以輕易達到多台資料庫資料一致的效果,同時在其中有機器掛掉的時候依然可以保有正常運作的空間,除此之外也可以運用到即時的備份到其餘測試機器或是其他用途的機器,不論是在要達到容錯或是附載平衡機制上都可以大大的幫助我們維護資料庫。
參考資料http://www.oracle.com/technetwork/middleware/goldengate/documentation/index.htmlhttp://hi.baidu.com/%BA%B2%C1%D6%BE%D3%CA%BFa/blog/item/1d79b6d8caa558b3cc116664.html