OGG技術原理


OGG架構

在一個典型的OGG環境中,會有兩個數據庫存在,同時也會有兩個GG實例運行,主要包括四個核心對象:源數據庫、目標數據庫、源GG、目標GG。
數據復制運行流程大概如下:
源數據庫在運行過程中,LGWR進程會源源不斷地把日志記錄到聯機日志中(online log)。源GG的工作起點或者整個GG數據庫流的起點也就是從源數據庫的聯機日志開始。
在源GG端:
1) Extract進程從聯機日志挖掘數據,記錄到本地的Source Trail文件中。
2) Data Pump進程從Source Trail文件把數據出來,然后通過網絡,丟給目標GG上的Collector進程。
在目標端:

Collector進程從接收數據到一個本地文件(Remote Trail)中。
2)另一個Replicate進程從這些文件中挖取數據,然后在目標數據庫上更新數據。
注:可以把源GG端步驟1,2合並成一個,直接把數據挖掘出來發送給目標端。
Capture(Local Extract)Process
捕獲進程就是源GG把源數據庫中變化(插入、更新、刪除)數據抓出來的過程。通常指Local Extract進程,抽取進度還包括Data Pump Extract ,Inital-Load Extact和Discard File。
Inital-Load:主要用於目標數據庫的初始化,這個過程類似Oracle EXP/IMP,數據泵。

Local Extract進程特點
可以直接把挖掘的數據發給目標GG或者緩存本地Source Trail
只會記錄已經提交的變化,而把其他的活動(如回滾)過濾掉。
可以捕獲DML,也可以捕獲DDL
支持多進程或者單進程處理全部表或多個表
支持Schema級別、表級別、列級別不同粒度的抓取
Source Trail
Source Trail作為一個中間文件,保存抓取進程捕獲的數據,以大塊方式進行存儲,等待下一個環節(Data Pump Extract)處理。Trail文件是一種GG特有的文件,具有自己的元數據。在每個文件或者每條記錄上,都一個“頭”記錄。為了跟蹤事物和保證數據一致性,采用CSN(Commit Sequece Number)這個概念,把CSN寫到檢查點文件(checpoint)和Trail文件中。CSN類似Oracle SCN,在SQLserver復制中用虛擬日志文件號,虛擬日志段號和虛擬日志記錄號的拼接形成。

Source Trail進程特點
可以控制Source Trail文件大小,保證寫滿后,創建新的Trail文件。
支持Trail文件自動清理,按照保留時間或者Trail文件的總數量限制
Data Pump
Data Pump主要功能是用於抓取Source Trail,然后發送給目標GG。
主要特點:
1.支持多級Data Pump:可以通過Data Pump將數據引入一個中間區,這個中間區可以部署多個DataPump對數據進行過濾,再導向多個目標系統。
2.對於不能處理的記錄,同Extact進程一樣寫入discard文件。
3.支持數據壓縮和加解密

Collector
Collector進程主要用於接收源數據庫發送數據的。

Remote Trail
Remote Trail文件和SourceTrail 類似,具有相同的特點,區分在於存放的位置不同,命名格式為xxnnnnn.

發布(Delivery,Repalicate)
所謂發布(復制),就是把抓到變化數據應用到目標數據庫的過程。
其特點:

支持DDL,DML
支持多進程、多表、多列靈活組合。
對於不能處理的記錄,同Extact進程一樣寫入discard文件。
管理器和組
管理器進程(Manager)管理所有GG進程和資源。通過GGSCI發送來的命令執行。
組將抽取到應用整個流程的進程和文件,組成一個組。

進程檢查點(checkpoint)
GG的各組進程都是獨立工作的,都可以獨立啟動和關閉。為了解決斷點和續傳的問題,這些進程會記錄各自的讀寫位置信息,從而防止進程因系統、網絡崩潰而導致的數據丟失,這個記錄動作就是“檢查點”。檢查點對GG保證數據一致性非常重要。
GG的檢查點由一個內部進程自動控制,與數據庫檢查點的概念類似。提取進程的檢查點記錄它在數據源中的讀取位置和隊列的寫出位置,復制進程的檢查點記錄它讀取隊列的位置。每個提取進程和復制進程都由自己對應的檢查點信息。當GoldenGate的進程重啟時,由它記所記錄的檢查點決定需求讀取的隊列位置。
GG的檢查點信息由兩種存放方式:
1.文件形式:放在一個目錄下,一個進程(或者一個組)對一個文件。源端GG的Extract進程只能使用這個模式。
2.數據庫表:目標GG推薦使用這種形式,記錄量比較小,基本上是更新行,少量插入行。

環境要求
源數據庫需求
如果是Oracle

附加日志(Supplemental Logging)。一般在邏輯Standby和stream這兩個Oracle特性中用到。附加日志對修改記錄精確定位起了非常關鍵的作用,對后續的表級、列級的抽取復制提供詳細信息。
日志設置
歸檔日志:避免日志生產過快,未來得及抓取就被覆蓋了。
強制日志模式:避免有些操作(直接路徑加載)會跳過redo,導致數據無法同步。
開啟附加日志(結合實際情況進行,詳細配置)。
目標數據庫需求
配置檢查表信息(采用數據庫形式)

GG實戰
單向復制實踐概述
流程概述:
1.CDC(Change Data Caputure):開啟源端GG的Extract、Data Pump進程,記錄初始加載過程數據變化。
2.數據初始加載:將源數據庫的歷史數據一次性復制到目標數據庫去。
3.Change Delivery:啟動Replicat進程,讀取數據應用到目標端。

GG配置
GG配置注意點:

可配置多用戶針用於不同單復制流程
配置附加日志
配置目標數據庫:關閉和禁用觸發器和級聯約束;配置檢查表
# GG高級用法

典型拓撲結構
單向(查詢分流)
雙向(主用/備用或者主動-主動,實現高可用性)
對等(負載平衡、多住)
廣播(數據分發)
集成/整合(數據倉庫)
級聯式(數據集市)
RAC的特殊說明
ASM文件的訪問
net8:基於TCP網絡訪問,需要配置TNS和賬號密碼
BEQ方式:IPC機制(進程間直接通信),需要配置TNS
DBLOGERADER:ASM API接口
RAC節點部署
可以放在任何一個節點上,可利用GRID實現節點間的Failover;通過ACFS,實現GG的共享安裝。

定義日志線程數
GG與rac日志線程數統一

數據過濾
支持表、列、行過濾

數據來源過濾
在雙向復制模式下,對兩端抽取和應用進行針對性過濾,避免形成死循環。

數據映射
能夠在目標端和源端不同表和不同列之間進行映射,實現同步復制。

##值的處理
1.簡單的賦值:對目標端某一列進行固定值賦值
2.利用SQL語句和存儲過程進行賦值

Trail文件和清理
數據壓縮
目前10.4不支持對壓縮表的數據復制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM