劉傳堯,謝火木,施芝元
(1.廈門大學現(xiàn)代教育技術(shù)與實踐訓練中心,2.廈門大學信息科學與技術(shù)學院,福建 廈門361005)
高校校園信息化在建設初期由于沒有進行統(tǒng)籌規(guī)劃,各部門各自為陣,在全校范圍內(nèi)逐步建立了自己的信息系統(tǒng),如教務系統(tǒng)、科研系統(tǒng)、人事系統(tǒng)等,經(jīng)過近20年的發(fā)展,系統(tǒng)功能已經(jīng)趨于完善,并已經(jīng)融入到日常工作中,但隨著校園信息化的基礎(chǔ)設施的完善,這些孤立的系統(tǒng)逐漸顯現(xiàn)出了它們的弊端,其中最主要的問題就是這些系統(tǒng)之間無法實現(xiàn)實時數(shù)據(jù)同步與信息共享而形成了所謂的“信息孤島”[1].目前主要解決的辦法有2種:1)推翻原有系統(tǒng),建立校級數(shù)據(jù)中心,由學校重新規(guī)劃建設各部門信息系統(tǒng),但成本過高;2)對原有的系統(tǒng)進行升級改造,然后實現(xiàn)跨部門之間的實時數(shù)據(jù)同步,讓“數(shù)據(jù)孤島”之間的基礎(chǔ)數(shù)據(jù)有效共享、合并冗余數(shù)據(jù)[2],這是目前普遍采用的方法.
所謂“信息孤島”(information isolated island)指的是相對獨立的不同類型的信息系統(tǒng),由于相互封閉,無法進行順暢的信息交流,猶如一個個分散、獨立的島嶼[3].其本質(zhì)問題就是這些獨立的系統(tǒng)之間所生成的數(shù)據(jù)無法相互共享、數(shù)據(jù)不一致,這不僅導致了不同的系統(tǒng)因獨立管理而產(chǎn)生大量冗余數(shù)據(jù),而且由于系統(tǒng)與系統(tǒng)之間缺乏數(shù)據(jù)關(guān)聯(lián),無法對數(shù)據(jù)進行科學分析,特別在大數(shù)據(jù)時代學校無法使用這些數(shù)據(jù)進行科學的管理與決策.高?!靶畔⒐聧u”產(chǎn)生的原因主要是在信息化建設初期,在認識上,沒有充分理解信息化內(nèi)涵;在管理上,缺少統(tǒng)一規(guī)劃;在技術(shù)上,只注重硬件投入,而忽略軟件資源的建設[3].
查閱文獻發(fā)現(xiàn),目前在解決高?!靶畔⒐聧u”問題上,主要還是從政策理論上去避免“信息孤島”的產(chǎn)生,通過技術(shù)來解決現(xiàn)存的“信息孤島”的方案相關(guān)文獻比較缺乏.目前也有專家提出基于信息交換平臺的實現(xiàn)方法,比如,顏廷良[4]提出基于XML消息的安全數(shù)據(jù)交換平臺研究與應用,郭向陽[5]提出基于數(shù)據(jù)庫復制技術(shù)的云交換平臺研究與實現(xiàn)等.本文提出的是一種基于日志解析數(shù)據(jù)同步的“數(shù)據(jù)孤島”解決方案.該方案的優(yōu)勢在于操作方便,適合遠程同步操作,可以實現(xiàn)記錄級、表一級以及異構(gòu)表間的數(shù)據(jù)同步等.
本文提出的數(shù)字校園的數(shù)據(jù)同步方案,主要依靠分析Oracle數(shù)據(jù)庫Redo日志文件,解析日志中的SQL語句,進而讓遠程目標服務器執(zhí)行同樣SQL語句來實現(xiàn)云同步.
Oracle數(shù)據(jù)庫的操作事務都記錄在Redo日志中,但是原始的Redo日志是加密存儲的非開放二進制數(shù)據(jù),無法直接提取閱讀,要解析Oracle日志,目前比較好的方法就是使用Oracle公司提供的LogMiner工具.LogMiner工具是Oracle8i版本以后新增加的功能,通過使用LogMiner程序,可以對Oracle日志進行解析,解析在線日志、離線日志以及數(shù)據(jù)庫的重作日志文件[6],從而獲得相應數(shù)據(jù)庫操作的DML語句,然后利用Flex詞法分析編譯工具,構(gòu)造針對SQL語句的解析器,并在解析以后重構(gòu)同步端需要的目標語句.
在廣域網(wǎng)數(shù)字校園環(huán)境下開發(fā)云同步系統(tǒng),主要技術(shù)瓶頸還是增量事件和數(shù)據(jù)如何同步到云端以及云同步系統(tǒng)的效率問題[7].傳統(tǒng)的分布式數(shù)據(jù)庫環(huán)境中采用的靜態(tài)數(shù)據(jù)備份技術(shù),由于傳輸數(shù)據(jù)文件容量巨大,導致效率很低[8-9],不適用于今天的云技術(shù)發(fā)展,所以增量事務同步成為云同步方案中唯一可行的選擇[10-11].在 Oracle數(shù)據(jù)庫中,增量事務同步需要解決Redo日志的解析以及增量事務和數(shù)據(jù)在云端計算機快速入庫的問題.
快速詞法分析產(chǎn)生器(Flex)是一種詞法分析程序,它是LEX的開放源代碼版本,以BSD許可證發(fā)布.本文使用的Flex版本為Flex2.5.2.Flex主要功能是依據(jù)用戶定義的正則表達式構(gòu)詞規(guī)則,生成掃描詞法結(jié)構(gòu)的自動程序.與自己設計詞法解析程序相比,F(xiàn)lex的速度和準確度高得多,并且采用它,可以減少書寫大量的代碼.
2.2.1 SQL語句解析器
本文的SQL語句解析器的設計如下:
1)基本SQL關(guān)鍵字解析,采用依據(jù)正則表達式直接構(gòu)造關(guān)鍵詞的方法.
2)SQL中的 Where語句解析.以下適用于不帶like,in等結(jié)構(gòu)的簡單where語句.
3)SQL語句中的insert的values值域解析.本文采用的構(gòu)造規(guī)則僅適用于標準SQL insert語句:
4)SQL語句中Set語句解析.舉例SQL結(jié)構(gòu)解析針對帶有to_date類型的SQL語句.
采用如下的SQL詞法構(gòu)造方法:
2.2.2 SQL語句解析類的設計
利用Flex構(gòu)造的SQL語句解析規(guī)則后需要在云同步系統(tǒng)中調(diào)用,還需要設計可重用的C++類庫.以下列舉本文云同步系統(tǒng)中采用的SQL語句解析類的結(jié)構(gòu)說明,其中FlexLexer.h為Flex類庫中的標準頭文件.
系統(tǒng)總體設計由3大模塊構(gòu)成,分別為云源端、云目的端和云控制端.云源端和云目的端以服務的方式運行,云控制端為一個在Windows下運行的32位應用程序.云源端根據(jù)云控制端發(fā)送的要求,操縱地方各局數(shù)據(jù)庫,然后提供系統(tǒng)所需的源數(shù)據(jù).目的端依據(jù)系統(tǒng)在云控制端的設置,在設定的周期內(nèi),抽取云源端的數(shù)據(jù),并進行入庫.云控制端操縱云源端和云目的端運行,并提供圖形控制界面供用戶設置云同步系統(tǒng)運行所需參數(shù).云同步系統(tǒng)各端定義如下:
1)云控制端:獲取云源端、云目的端數(shù)據(jù)庫的表信息和字段信息,并提供展示界面;提供云源端和云目的端對應數(shù)據(jù)表和字段映射的圖形操作界面;提供ftp信息配置界面和同步時間設置界面,并提供ftp連接測試界面;反饋信息圖形展示界面;將相關(guān)云同步配置信息發(fā)送給云客戶端和云服務端的監(jiān)聽端口.
2)云源端:捕獲指定監(jiān)聽端口的云控制端表格映射信息、同步文件夾和同步信號;依據(jù)捕獲到的時間信號,調(diào)用LogMiner進行解析入庫,并根據(jù)得到的表格映射信息,將入庫結(jié)果保存為.XML文件中;在云端同步時間到達時,將.XML文件上傳到指定的同步文件夾;周期捕獲云目的端的時間信號.
3)云目的端:在指定的監(jiān)聽端口捕捉來自云控制端的時間同步信號;在指定的時間同步信號內(nèi)讀取云源端上傳的語法構(gòu)造.XML文件,并依據(jù)語法規(guī)則構(gòu)造SQL語句執(zhí)行入庫.
云源端運行數(shù)據(jù)存儲過程LOG_DUMP,利用LogMiner對Oracle數(shù)據(jù)庫的Redo日志文件進行解析,并將結(jié)果存入與Redo日志文件同名的表中.云源端程序(Cloud_XS)將讀取的解析結(jié)果存入數(shù)據(jù)庫,并依據(jù)在云控制端配置的數(shù)據(jù)表映射關(guān)系將相關(guān)的SQL語句進行轉(zhuǎn)換,保存為.XML格式的文件,在云交換時間到達時以ftp方式上傳到云目標端.
云源端數(shù)據(jù)存儲過程主要功能包括SQL語句分析,通過Flex編寫詞法解析器,解析并重構(gòu)符合OTL接口標準的SQL語句[12];創(chuàng)建.XML文件,將構(gòu)造好的SQL語句依據(jù)云控制端的表項映射倒入到一個.XML文件中;訪問Oracle數(shù)據(jù)庫,從云控制端讀取同步參數(shù)(包括握手參數(shù)、時間參數(shù)和回滾參數(shù)等);客戶端功能,向云目標端上傳構(gòu)造好的含有SQL語句的.XML文件.云源端數(shù)據(jù)存儲過程業(yè)務邏輯詳見圖1.
云源端程序主要功能包括自動歸檔Redo日志和調(diào)用LogMiner解析最新歸檔的Redo日志.云源端的輸入為經(jīng)過LogMiner所解析的Redo日志,表的字段為:SCN,TIMESTAMP,SEG _OWNER,SEG _NAME,ROW_ID,SQL_REDO.表名稱同其對應的Redo日志名稱同名.云源端程序?qū)腞edo日志解析中獲取的結(jié)果,根據(jù)云控制端配置的表映射信息進行轉(zhuǎn)換,將轉(zhuǎn)換結(jié)果以XML文件的形式輸出.云源端程序流程詳見圖2.
云目標端主要負責在云交換時間到達時,讀取云源端程序上傳的.XML文件,將提取內(nèi)部保存的SQL語句執(zhí)行入庫.云目標端的主要功能包括創(chuàng)建Cloud_XD數(shù)據(jù)庫,解析.XML文件和執(zhí)行入庫操作.云目標端輸入為Cloud_XS程序上傳的.XML文件.云目標端程序流程詳見圖3.
云控制端程序主要負責提供圖形化的云源端與云目標端數(shù)據(jù)表映射關(guān)系,以及增刪改操作界面(由于云源端與云目標端對應表的字段可能不一致,可能在此過程中需要人工確定對應表格映射關(guān)系).
圖1 云源端數(shù)據(jù)存儲過程Fig.1 Cloud source client data storage process
云控制端的處理流程包括:通過用戶輸入獲取云目標端數(shù)據(jù)庫的信息后,連接云目標端數(shù)據(jù)庫,讀取Cloud_XD.Source表獲取云源端的數(shù)據(jù)庫表信息.通過Cloud_XD.Source表獲取源數(shù)據(jù)庫的信息可以訪問云源端各個數(shù)據(jù)庫Cloud_XS.Map和Cloud_XS.Field獲取配置完成的數(shù)據(jù)表映射信息.
云控制端提供操作的數(shù)據(jù)表和字段如下:
1)云交換時間設置:設置云交換時間后,云控制端需要將Cloud_XS.OM 和Cloud_XD.OM 的Exe_time_tag設置為云系統(tǒng)的同步時間.
2)云交換立即執(zhí)行的觸發(fā):當用戶觸發(fā)界面上立即同步按鈕后,云控制端需要將Cloud_XS.OM 和Cloud_XD.OM 的 Next_time_tag設置為當前時間.
3)云源端配置步驟:添加云源數(shù)據(jù)端后,需將相關(guān)信息填入Cloud_XD.Source數(shù)據(jù)庫,和Cloud_XS.OM的 Destination_IP、Destination_USER、Destination_PASSWORD、FTP_USER、FTP_PASSWORD字段.
4)云控制端的映射信息增刪改:用戶在云控制端進行映射信息的刪改操作時,將結(jié)果寫入Cloud_XS.Map和Cloud_XS.Field,并且將Cloud_XS.OM 表中的對應行ID值進行修改.
圖2 云源端程序流程Fig.2 Cloud source clien flow
圖3 云目標端程序流程Fig.3 Cloud target client flow
5)云系統(tǒng)的日志顯示:通過讀取Cloud_XS.OM和Cloud_XD.OM可以獲取當前云同步系統(tǒng)運行的日志.
6)云系統(tǒng)的同步控制:通過判斷Cloud_XD.OM的SYS_STATUS字段可以判斷云系統(tǒng)是否正在進行數(shù)據(jù)同步.
本次云交換系統(tǒng)云源端與云目標端程序均采用服務進程的方式設置為系統(tǒng)服務.云控制端程序負責遠程初始化云源端程序的交換時間、交換數(shù)據(jù)的數(shù)據(jù)表映射關(guān)系設置和交換數(shù)據(jù)的有效起始時間等參數(shù).云同步系統(tǒng)的時序圖詳見圖4.
為了提高云同步系統(tǒng)運行效率和性能,系統(tǒng)中的數(shù)據(jù)同步不是通過傳統(tǒng)的數(shù)據(jù)表復制來實現(xiàn),而是通過在云源端每小時調(diào)用一次Oracle數(shù)據(jù)庫自帶的LogMiner進行解析對應同步時段的在線Redo日志,然后將得到的SQL語句入庫.依據(jù)用戶在云控制端設置,將SQL語句中相關(guān)字段和數(shù)據(jù)進行轉(zhuǎn)換,以.XML文件保存,并在用戶指定云同步時間到達時,將.XML文件上傳至同步文件夾.云目的端程序?qū)?XML文件中的SQL語句存入數(shù)據(jù)庫指定表空間中.云源端再提取Redo日志存放表中事務操作內(nèi)容并執(zhí)行,達到云源端和云目標端的數(shù)據(jù)同步的目的.
實驗結(jié)果如表1所示,圖中顯示Redo日志文件規(guī)模直接影響到了云交換系統(tǒng)的交換頻率和交換時間長度.在Redo日志文件規(guī)模較小時,交換頻率偏高會影響到服務器日常工作(LogMiner的運行同時會影響數(shù)據(jù)庫效率),但是Redo日志文件規(guī)模設置較大時,又會導致云交換時間過長(例如必須在晚上非工作時間運行).根據(jù)實驗結(jié)果,日志文件設置約為50 MB是比較合理而且頻率和交換時間都處在可以接受的水平.
圖4 云同步系統(tǒng)的時序圖Fig.4 Cloud synchronization system sequence diagram
表1 數(shù)據(jù)交換系統(tǒng)實驗結(jié)果Tab.1 The test result of exchange system
在數(shù)字校園中的多重數(shù)據(jù)孤島環(huán)境下要開發(fā)云交換系統(tǒng),我們面對是數(shù)據(jù)庫中增量數(shù)據(jù)如何同步以及數(shù)據(jù)在同步時的效率這兩個主要問題.現(xiàn)高校中由于存在跨地多個校區(qū),這些校區(qū)之間要進行數(shù)據(jù)實時同步時,不能采用在集中環(huán)境下的那種簡單靜態(tài)數(shù)據(jù)備份技術(shù),這種技術(shù)在傳輸時文件過大,并且效率很低.因此以數(shù)據(jù)庫中的增量數(shù)據(jù)同步就成為了唯一可行的方案.在基于Oracle數(shù)據(jù)庫應用系統(tǒng)中,增量數(shù)據(jù)同步轉(zhuǎn)換成解決數(shù)據(jù)庫日志的解析以及增量產(chǎn)生的數(shù)據(jù)在目標計算機快速入庫的問題.利用LogMiner工具來解析Oracle系統(tǒng)的日志是實現(xiàn)分布式云交換系統(tǒng)所要解決前提條件之一.對LogMiner解析出的日志進行SQL語句分析重構(gòu)(針對目標數(shù)據(jù)庫的快速入庫接口重構(gòu))是實現(xiàn)分布式數(shù)據(jù)同步系統(tǒng)要解決的另一個前提.本文實現(xiàn)了數(shù)字校園網(wǎng)數(shù)據(jù)同步系統(tǒng)的技術(shù)問題及系統(tǒng)架構(gòu)問題,并給出了系統(tǒng)實現(xiàn)方案.
[1]段宗曜,饒水林.信息化建設在高校校園中的實現(xiàn)模式研究[J].計算機科學,2013,40(11A):417-420.
[2]趙衛(wèi),馮華麗.高校信息化平臺建設中“信息孤島”現(xiàn)象及對策[J].中國科技信息,2014(24):52-53.
[3]舒暢.高校數(shù)字化校園的壁壘--信息孤島[J].中國教育信息化,2011(5):16-17.
[4]顏廷良.基于XML消息的安全數(shù)據(jù)交換平臺研究與應用[J].計算機技術(shù)與發(fā)展,2013,23(2):172-176.
[5]郭向陽.基于數(shù)據(jù)庫復制技術(shù)的云交換平臺研究與實現(xiàn)[J].計算機與現(xiàn)代化,2011(8):157-163.
[6]張立奎,閆子熙.基于LogMiner的Oracle數(shù)據(jù)庫日志分析[J].計算機與網(wǎng)絡,2013(21):145-147.
[7]張青鳳,張鳳琴,王磊.多數(shù)據(jù)中心的數(shù)據(jù)同步模型研究與設計[J].微型機與應用,2013(12):60-66.
[8]趙榮.分布式數(shù)據(jù)庫系統(tǒng)的故障恢復方法[J].科技信息,2013(11):160-161.
[9]秦森,楊艷.基于Oracle日志分析的數(shù)據(jù)還原操作的設計及實現(xiàn)[J].電腦知識與技術(shù),2007(3):626-628.
[10]王玉標,饒錫如,何盼.異構(gòu)環(huán)境下數(shù)據(jù)庫增量同步更新機制[J].計算機工程與設計,2011,32(3):948-951.
[11]楊德勇.遠程數(shù)據(jù)同步的設計與實現(xiàn)[J].信息與電腦,2012(3):112-113.
[12]孫兆玉,朱鴻宇,黃宇光.Linux環(huán)境中使用Flex、Bison進行SQL語法分析[J].電腦編程技巧與維護,2007(2):38-41.