沈一通 云南省氣象局
基于oracle日志挖掘的增量同步方案的設計
沈一通 云南省氣象局
本文介紹了一種通過oracle日志挖掘對數據進行增量同步的一種方案。其中使用了oracle自帶的LogMiner,python腳本語言和sql loader的工具和技術來實現增量同步。由于采用的都是oracle自帶工具和腳本,對于不需要同步存儲過程和視圖的高并發且低復雜度的數據,該方案比流行同步方案優勢在于簡潔高效不影響實時業務。
增量同步 Oracle LogMiner python sql loader
對于Oracle數據庫同步現在已經有很多方案,常見方案有著以下優缺點:
①通過觸發器等方式提取源數據庫數據生成腳本到目的數據庫執行。其優點在于自行編程,對數據的定制同步比較靈活。缺點是效率低,大量數據同步時有可能影響數據庫性能,只適合運用于頻率不高的小數據量同步。
②通過Oracle Golden Gate實現數據同步。該方案優點在于Oracle Golden Gate是Oracle官方提供且功能強大。缺點是Oracle Golden Gate屬于商業軟件成本高,小系統開發不適合。
③使用如SymmetricDS等開源免費的第三方工具同步。優點在于互聯網上便于找到技術支持和文檔。其缺點在于對于大數據量時臃腫不穩定。
④使用類似kettle+ActiveMQ的中間件方式同步。優點是對于第一種方案的加強可以自由定制且提高效率。缺點是學習成本多需要掌握中間件技術,對于簡單同步大材小用。
基于以上流行同步方案,本文旨在設計一種針對應用中大量簡單數據的增量同步的輕量化同步方案。本文所設計的方案涉及的工具分別是Oracle自帶的LogMiner和sql loader以及腳本語言python。都是常見且對于數據庫新手也比較容易上手的工具,且可根據需要同步的數據靈活定制。
本同步方案可以分為3個部分:源數據庫日志挖掘部分、入庫信息轉接部分、目的庫入庫部分。
2.1 源數據庫日志挖掘
源數據庫日志挖掘主要有oracle自帶工具LogMiner承擔。
LogMiner安裝與配置有較全的網絡文檔,可按文檔針對數據庫完成創建數據字典,添加分析的日志文件,啟動LogMiner導出分析結果三個步驟的循環執行。
例如在windows下的操作(使用DBA權限用戶):


2.2 入庫信息轉接
獲得日志分析結果后可由python對日志分析進一步提取和轉接向目的數據庫。使用ctl文件來導入對于數據庫效率影響小,比較適合大量數據導入。
Python腳本承擔3個任務分別是:
①針對需要同步的數據生成ctl任務控制文件。
對于增量同步ctl文件中設置需要加載數據文件模板,并將操作模式設為append。
②對日志分析結果生成數據文件。
用腳本執行select sql_redo from v$logmnr_contents where seg_owner='LOGMNR' and table_name='TEST' and operation='INSERT';就可得到增量的數據。
使用python中re模塊正則提取需要的入庫信息而后按ctl文件中數據模板生成數據文件。
③將ctl文件和數據文件通過ftp方式傳到目的數據庫。
2.3 目的數據庫入庫
使用定時腳本或存儲過程調用sqlldr工具對目標數據庫入庫。
如可以在腳本中執行:
sqlldr control='f: est.ctl' data='f: estLoad.txt' test.ctl為上一步生成ctl文件。testLoad.txt為上一步生成的數據文件。
這個方案適用于基于Oracle的高并發實時生產環境,諸如元數據監控需要同步數據中不需要函數運算的導入和更新刪除操作。由于是實時業務而對數據庫性能要求較高,一些大量數據的同步方案如通過Oracle審計提取會影響數據庫性能,如果采用數據庫主從備份方式又過于復雜,而LogMiner工具離線可以跟蹤數據庫的變化而不影響在線系統的性能。對于數據復雜程度不高但實時數據量比較大的系統可以采用,諸如:氣象元數據監控,氣象要素實時監控,列出票務數據監控等等。
[1]張立奎,閆子熙.基于LogMiner的Oracle數據庫日志分析[J].計算機與網絡,2013(03,04):145
[2]王玉標,饒錫如,何盼.異構環境下數據庫增量同步更新機制[J].計算機工程與設計,2011(03):948
[3]雷遠平.消息機制實現異構數據庫的同步更新[J].計算機應用.2008.28(7):1700-1702
[4]蓋國強.深入解析Oracle:DBA入門、進階與診斷案例[M].北京:人民郵電出版社,2009,318-324
[5]徐榮飛.Python正則表達式研究[J].電腦編程技巧與維護,2015(09):49
沈一通,1989—,工作單位:云南省氣象局,職稱:助工,學歷:本科。