基於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
- Oracle+Ogg 歸檔丟失 重新導資料建立ogg同步步驟Oracle
- ogg 同步pg資料到oracle--步驟Oracle
- 1.4 基於OGG單表到分庫分表資料同步場景
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- Oracle 19C OGG基礎運維-03DML操作同步Oracle運維3D
- Oracle 19C OGG基礎運維-05DDL操作同步Oracle運維
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- 基於uni-app圖片上傳JS外掛APPJS
- [資料整合/資料同步] 基於資料庫增量日誌的資料同步方案 : Flink CDC/Debezium/DataX/Canal/Oracle Goldengate/Kettle/Sqoop資料庫OracleGoOOP
- Oracle 19C OGG基礎運維-02資料初始化Oracle運維
- 基於DataX的資料同步(上)-DataX介紹以及安裝
- 【融雲分析】基於原生程式碼開發Flutter 外掛Flutter
- 企業資料如何快速同步上雲?
- dg和ogg的區別--oracle資料庫Oracle資料庫
- 大資料匯流排(DataHub)大資料
- 關於內外網資料同步解決方案
- 基於Intellij 外掛開發指南IntelliJ
- 基於DataX的資料同步(下)-應用DataX進行資料同步
- ORACLE(Linux版本)實時同步資料到MYSQL(Linux版本)解決方案:OGGOracleLinuxMySql
- 使用ogg 從oracle 同步mysql遇到問題記錄OracleMySql
- Oracle 11g RAC到單例項OGG同步Oracle單例
- OGG-Oracle 11.2.0.1 ->19.3 pdb 使用Ogg 同步版本相關問題學習整理Oracle
- Oracle 19C OGG基礎運維-04DML同步常見問題Oracle運維
- 聊天富文字外掛,一個基於react的富文字外掛React
- Book2Notion:將豆瓣圖書資訊同步到Notion的Chrome外掛Chrome
- VSCode 雲同步擴充套件設定 Settings Sync 外掛VSCode套件
- 基於Ruby的Burpsuite外掛開發UI
- 基於hanlp的es分詞外掛HanLP分詞
- 基於 Rainbond 的 Pipeline(流水線)外掛AI
- 基於等保3.0的MySQL資料庫審計日誌外掛實踐MySql資料庫
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- Oracle 19C OGG基礎運維-09OGG-15121錯誤Oracle運維
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- Debezium vs OGG vs Tapdata:如何實時同步 Oracle 資料到 Kafka 訊息佇列?OracleKafka佇列
- 使用oracle的logminer同步資料Oracle
- ogg 同步kafka OGG-15051 Java or JNI exception:KafkaJavaException
- 基於 MySQL Binlog 的 Elasticsearch 資料同步實踐MySqlElasticsearch