基於OGG Datahub外掛將Oracle資料同步上雲
一、背景介紹
隨著資料規模的不斷擴大,傳統的RDBMS難以滿足OLAP的需求,本文將介紹如何將Oracle的資料實時同步到阿里雲的大資料處理平臺當中,並利用大資料工具對資料進行分析。
OGG(Oracle GoldenGate)是一個基於日誌的結構化資料備份工具,一般用於Oracle資料庫之間的主從備份以及Oracle資料庫到其他資料庫(DB2, MySQL等)的同步。下面是Oracle官方提供的一個OGG的整體架構圖,從圖中可以看出OGG的部署分為源端和目標端兩部分組成,主要有Manager,Extract,Pump,Collector,Replicat這麼一些元件。
Manager:在源端和目標端都會有且只有一個Manager程式存在,負責管理其他程式的啟停和監控等;
Extract:負責從源端資料庫表或者事務日誌中捕獲資料,有初始載入和增量同步兩種模式可以配置,初始載入模式是直接將源表資料同步到目標端,而增量同步就是分析源端資料庫的日誌,將變動的記錄傳到目標端,本文介紹的是增量同步的模式;
Pump:Extract從源端抽取的資料會先寫到本地磁碟的Trail檔案,Pump程式會負責將Trail檔案的資料投遞到目標端;
Collector:目標端負責接收來自源端的資料,生成Trail檔案
Replicat:負責讀取目標端的Trail檔案,轉化為相應的DDL和DML語句作用到目標資料庫,實現資料同步。
本文介紹的Oracle資料同步是通過OGG的Datahub外掛實現的,該Datahub外掛在架構圖中處於Replicat的位置,會分析Trail檔案,將資料的變化記錄寫入Datahub中,可以使用流計算對datahub中的資料進行實時分析,也可以將資料歸檔到MaxCompute中進行離線處理。
二、安裝步驟
0. 環境要求
源端已安裝好Oracle
源端已安裝好OGG(建議版本Oracle GoldenGate V12.1.2.1)
目標端已安裝好OGG Adapters(建議版本Oracle GoldenGate Application Adapters 12.1.2.1)
java 7
(下面將介紹Oracle/OGG相關安裝和配置過程,Oracle的安裝將不做介紹,另外需要注意的是:Oracle/OGG相關引數配置以熟悉Oracle/OGG的運維人員配置為準,本示例只是提供一個可執行的樣本,Oracle所使用的版本為ORA11g)
1. 源端OGG安裝
下載OGG安裝包解壓後有如下目錄:
目前oracle一般採取response安裝的方式,在response/oggcore.rsp中配置安裝依賴,具體如下:
執行命令:
本示例中,安裝後OGG的目錄在/home/oracle/u01/ggate,安裝日誌在/home/oracle/u01/ggate/cfgtoollogs/oui目錄下,當silentInstall{時間}.log檔案裡出現如下提示,表明安裝成功:
執行/home/oracle/u01/ggate/ggsci命令,並在提示符下鍵入命令:CREATE SUBDIRS,從而生成ogg需要的各種目錄(dir打頭的那些)。
至此,源端OGG安裝完成。
2. 源端Oracle配置
以dba分身進入sqlplus:sqlplus / as sysdba
3. OGG源端mgr配置
以下是通過ggsci對ogg進行配置
配置mgr
edit params mgr
啟動mgr(執行日誌在ggate/dirrpt中)
start mgr
檢視mgr狀態
info mgr
檢視mgr配置
view params mgr
4. OGG源端extract配置
以下是通過ggsci對ogg進行配置
配置extract(名字可任取,extract是組名)
edit params extract
增加extract程式(ext後的名字要跟上面extract對應,本例中extract是組名)
add ext extract,tranlog, begin now
刪除某廢棄程式DP_TEST
delete ext DP_TEST
新增抽取程式,每個佇列檔案大小為200m
add exttrail ./dirdat/st,ext extract, megabytes 200
啟動抽取程式(執行日誌在ggate/dirrpt中)
start extract extract
至此,extract配置完成,資料庫的一條變更可以在ggate/dirdat目錄下的檔案中看到
5. 生成def檔案
源端ggsci起來後執行如下命令,生成defgen檔案,並且拷貝到目標端dirdef下
edit params defgen
在shell中執行如下命令,生成ogg_test.def
./defgen paramfile ./dirprm/defgen.prm
6. 目標端OGG安裝和配置
解壓adapter包
將源端中dirdef/ogg_test.def檔案拷貝到adapter的dirdef下
執行ggsci起來後執行如下命令,建立必須目錄
create subdirs
編輯mgr配置
edit params mgr
啟動mgr
start mgr
7. 源端ogg pump配置
啟動ggsci後執行如下操作:
編輯pump配置
edit params
新增投遞程式,從某一個佇列開始投
add ext pump,exttrailsource ./dirdat/st
備註:投遞程式,每個隊檔案大小為200m
add rmttrail ./dirdat/st,ext pump,megabytes 200
啟動pump
start pump
啟動後,結合上面adapter的配置,可以在目標端的dirdat目錄下看到過來的trailfile
8. Datahub外掛安裝和配置
依賴環境:jdk1.7。
配置好JAVA_HOME, LD_LIBRARY_PATH,可以將環境變數配置到~/.bash_profile中,例如
修改環境變數後,請重啟adapter的mgr程式
下載datahub-ogg-plugin.tar.gz並解壓:
修改conf路徑下的javaue.properties檔案,將{YOUR_HOME}替換為解壓後的路徑
修改conf路徑下的log4j.properties檔案,將{YOUR_HOME}替換為解壓後的路徑
修改conf路徑下的configure.xml檔案,修改方式見檔案中的註釋
在ggsci下啟動datahub writer
edit params dhwriter
新增dhwriter
add extract dhwriter, exttrailsource ./dirdat/st
啟動dhwriter
start dhwriter
三、使用場景
這裡會用一個簡單的示例來說明資料的使用方法,例如我們在Oracle資料庫有一張商品訂單表orders(oid int, pid int, num int),該表有三列,分別為訂單ID, 商品ID和商品數量。
將這個表通過OGG Datahub進行增量資料同步之前,我們需要先將源表已有的資料通過DataX同步到MaxCompute中。增量同步的關鍵步驟如下:
(1)在Datahub上建立相應的Topic,Topic的schema為(string record_id, string optype, string readtime, bigint oid_before, bigint oid_after, bigint pid_before, bigint pid_after, bigint num_before, bigint num_after);
(2)OGG Datahub的外掛按照上述的安裝流程部署配置,其中列的Mapping配置如下:
其中optype和readtime欄位是記錄資料庫的資料變更型別和時間,optype有"I", "D", "U"三種取值,分別對應為“增”,“刪”,“改”三種資料變更操作。
(3)OGG Datahub外掛部署好成功執行後,外掛會源源不斷的將源表的資料變更記錄輸送至datahub中,例如我們在源訂單表中新增一條記錄(1,2,1),datahub裡收到的記錄如下:
修改這條資料,比如把num改為20,datahub則會收到的一條變更資料記錄,如下:
實時計算
在前一天的離線計算的基礎資料上,我們可以寫一個StreamCompute流計算的分析程式,很容易地對資料進行實時彙總,例如實時統計當前總的訂單數,每種商品的銷售量等。處理思路就是對於每一條到來的變更資料,可以拿到變化的數值,實時更新統計變數即可。
離線處理
為了便於後續的離線分析,我們也可以將Datahub裡的資料歸檔到MaxCompute中,在MaxCompute中建立相應Schema的表:
createtableorders_log(record_idstring, optypestring, readtimestring, oid_beforebigint, oid_afterbigint, pid_beforebigint, pid_afterbigint, num_beforebigint, num_afterbigint);
在Datahub上建立MaxCompute的資料歸檔,上述流入Datahub裡的資料將自動同步到MaxCompute當中。建議將同步到MaxCompute中的資料按照時間段進行劃分,比如每一天的增量資料都對應一個獨立分割槽。這樣當天的資料同步完成後,我們可以處理對應的分割槽,拿到當天所有的資料變更,而與和前一天的全量資料進行合併後,即可得到當天的全量資料。為了簡單起見,先不考慮分割槽表的情況,以2016-12-06這天的增量資料為例,假設前一天的全量資料在表orders_base裡面,datahub同步過來的增量資料在orders_log表中,將orders_base與orders_log做合併操作,可以得到2016-12-06這天的最終全量資料寫入表orders_result中。這個過程可以在MaxCompute上用如下這樣一條SQL完成。
四、常見問題
Q:目標端報錯 OGG-06551 Oracle GoldenGate Collector: Could not translate host name localhost into an Internet address.
A:目標端機器hostname在/etc/hosts裡面重新設定localhost對應的ip
Q:找不到jvm相關的so包
A:將jvm的so路徑新增到LD_LIBRARY_PATH後,重啟mgr
例如:exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$JAVA_HOME/lib/amd64:$JAVA_HOME/lib/amd64/server
Q:有了DDL語句,比如增加一列,源端ogg沒有問題,但是adapter端的ffwriter和jmswriter程式退出,且報錯: 2015-06-11 14:01:10 ERROR OGG-01161 Bad column index (5) specified for table OGG_TEST.T_PERSON, max columns = 5.
A:由於表結構改變,需要重做def檔案,將重做的def檔案放入dirdef後重啟即可。
本文作者:冶善
本文為雲棲社群原創內容,未經允許不得轉載。
相關文章
- 通過DTS將RDS的資料實時同步至DataHub
- 1.4 基於OGG單表到分庫分表資料同步場景
- Oracle DML/DDL同步資料(OGG_12.2_for_Windows)OracleWindows
- OGG實現兩臺oracle資料庫的同步Oracle資料庫
- 支援多檔案上傳,預覽,拖拽,基於bootstrap的上傳外掛fileinput的ajax非同步上傳boot非同步
- Oracle+Ogg 歸檔丟失 重新導資料建立ogg同步步驟Oracle
- 基於uni-app圖片上傳JS外掛APPJS
- 企業資料如何快速同步上雲?
- 【融雲分析】基於原生程式碼開發Flutter 外掛Flutter
- 基於OGG的Oracle與Hadoop叢集準實時同步介紹OracleHadoop
- ogg 同步pg資料到oracle--步驟Oracle
- 基於DataX的資料同步(上)-DataX介紹以及安裝
- 大資料匯流排(DataHub)大資料
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- 關於OGG單表同步
- 基於easyui fom分組外掛UI
- sqlldr 載入資料 OGG 是否會同步SQL
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- 關於內外網資料同步解決方案
- 基於DataX的資料同步(下)-應用DataX進行資料同步
- 聊天富文字外掛,一個基於react的富文字外掛React
- 基於hanlp的es分詞外掛HanLP分詞
- 基於Intellij 外掛開發指南IntelliJ
- 基於canvas的視訊遮罩外掛Canvas遮罩
- 在原ogg基礎上重新搭建ogg
- 基於等保3.0的MySQL資料庫審計日誌外掛實踐MySql資料庫
- 常用jquery外掛資料jQuery
- 外掛 檔案上傳外掛 ajaxfileupload.js外掛JS
- [資料整合/資料同步] 基於資料庫增量日誌的資料同步方案 : Flink CDC/Debezium/DataX/Canal/Oracle Goldengate/Kettle/Sqoop資料庫OracleGoOOP
- Oracle 19C OGG基礎運維-03DML操作同步Oracle運維3D
- Oracle 19C OGG基礎運維-05DDL操作同步Oracle運維
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- ogg12 mysql to oracle 單向同步MySqlOracle
- 基於 HanLP 的 ES 中文分詞外掛HanLP中文分詞
- 編寫基於jQuery的外掛的方法jQuery
- [外掛擴充套件]防護雲Iswaf外掛套件
- (是時候開發屬於自己的外掛了)資料校驗外掛開發指南
- 谷歌清理 Chrome 外掛:多用途外掛將被禁谷歌Chrome