国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)據(jù)庫同步技術(shù)的研究與實(shí)現(xiàn)

2017-03-22 12:34:43劉娟娟劉帥
軟件工程 2017年1期

劉娟娟 劉帥

摘 要:為解決當(dāng)前分布式系統(tǒng)中多數(shù)據(jù)源、多異構(gòu)數(shù)據(jù)庫問題,針對現(xiàn)有的數(shù)據(jù)庫同步方案在實(shí)際應(yīng)用中所暴露出的資源損耗大、可移植性差、應(yīng)用范圍窄等問題,在分析了現(xiàn)有的數(shù)據(jù)同步技術(shù)的各自優(yōu)缺點(diǎn)的基礎(chǔ)上,提出了采用Sql plus和Merge語句相結(jié)合的數(shù)據(jù)庫同步方案,并對數(shù)據(jù)同步的系統(tǒng)進(jìn)行了設(shè)計,最后通過功能比較和性能分析,該方案在資源損耗、可移植性、應(yīng)用范圍等方面更具優(yōu)勢。

關(guān)鍵詞:數(shù)據(jù)同步;數(shù)據(jù)轉(zhuǎn)換;數(shù)據(jù)復(fù)制

中圖分類號:TP311.132 文獻(xiàn)標(biāo)識碼:A

1 引言(Introduction)

近年來在信息技術(shù)飛速發(fā)展的帶領(lǐng)下,各行業(yè)對信息管理技術(shù)都逐漸步入深層次的運(yùn)用階段,各個單位面臨的環(huán)境越來越復(fù)雜,由于各個行業(yè)的市場發(fā)展和擴(kuò)張,越來越多的單位都邁入了跨區(qū)分布式經(jīng)營的行列,而與單位分布式經(jīng)營相呼應(yīng)的結(jié)果就是產(chǎn)生了分布式數(shù)據(jù)存儲環(huán)境[1]。并且現(xiàn)代信息技術(shù)的發(fā)展是日新月異的,當(dāng)前正在使用的很多信息系統(tǒng)在不同的時期使用不同技術(shù)進(jìn)行開發(fā),而且又由不同的團(tuán)隊各自進(jìn)行設(shè)計,使得這些系統(tǒng)的平臺往往呈現(xiàn)出異構(gòu)性,導(dǎo)致了現(xiàn)有數(shù)據(jù)的差異性。為保證當(dāng)前使用的各個信息系統(tǒng)之間數(shù)據(jù)交換的暢通,保障各個系統(tǒng)之間數(shù)據(jù)傳輸中的安全性及一致性,真正實(shí)現(xiàn)數(shù)據(jù)共享,避免出現(xiàn)數(shù)據(jù)孤島。因此,如何及時有效地處理這些異構(gòu)數(shù)據(jù)庫中的數(shù)據(jù)成為一個頗受關(guān)注的研究問題。

為解決當(dāng)前多應(yīng)用系統(tǒng)中使用Sql Server、Oracle等多異構(gòu)分布式數(shù)據(jù)庫的數(shù)據(jù)集成、合并等問題,結(jié)合使用異構(gòu)數(shù)據(jù)庫數(shù)據(jù)合并技術(shù),實(shí)現(xiàn)源數(shù)據(jù)庫Sql Server、Oracle和目標(biāo)數(shù)據(jù)庫Oracle的數(shù)據(jù)同步。另外其常常涉及還包括Access、DB2、MYSql等數(shù)據(jù)庫。

2 數(shù)據(jù)庫同步技術(shù)解析(Analysis of database synchronization technology)

2.1 媒介同步技術(shù)

媒介同步技術(shù)是一種20世紀(jì)后期存在的數(shù)據(jù)同步技術(shù)。其原理是把需要更新的數(shù)據(jù)拷貝到如硬件磁盤等媒介中,通過專用信息通道發(fā)送到需要數(shù)據(jù)同步的區(qū)域,再由目的區(qū)域管理員進(jìn)行新增數(shù)據(jù)的添加與更新[2]。本方法由于更新的時間長效率慢等特性,已不再使用。

2.2 發(fā)布/訂閱同步技術(shù)

Sql Server的發(fā)布/訂閱是一種單對多的依賴關(guān)系備份的機(jī)制,是多個訂閱數(shù)據(jù)庫監(jiān)聽數(shù)據(jù)源數(shù)據(jù)庫的變更,當(dāng)源數(shù)據(jù)庫數(shù)據(jù)發(fā)生變更時通知訂閱它的數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步變更,通過該機(jī)制實(shí)現(xiàn)整個過程不用代碼編寫。其本質(zhì)是生成源數(shù)據(jù)庫的快照,是Sql Server多數(shù)據(jù)庫間保持?jǐn)?shù)據(jù)變更同步一種方案。在發(fā)布/訂閱中,各個訂閱數(shù)據(jù)庫采取異步方式來被數(shù)據(jù)同步,也就是當(dāng)源數(shù)據(jù)庫數(shù)據(jù)發(fā)生變更的同時,訂閱數(shù)據(jù)庫要無條件的服從源數(shù)據(jù)庫的數(shù)據(jù)操作并同步完成數(shù)據(jù)變更。

在實(shí)際應(yīng)用中,從專業(yè)的角度來分析,發(fā)布/訂閱技術(shù)存在如下缺陷:

(1)同步雙方的表結(jié)構(gòu)不能更改,并且表結(jié)構(gòu)必須一致,一旦發(fā)布方數(shù)據(jù)庫表結(jié)構(gòu)發(fā)生更改需要重新生成數(shù)據(jù)庫快照。

(2)對于大數(shù)據(jù)量的同步缺乏可靠的保證,其中主要原因是大數(shù)據(jù)量的數(shù)據(jù)同步過程中不具備可靠的通信鏈路,造成訂閱數(shù)據(jù)庫與源數(shù)據(jù)庫之間數(shù)據(jù)傳輸延時問題,同時會致使有效數(shù)據(jù)嚴(yán)重丟失,最終造成數(shù)據(jù)同步失敗。

(3)源數(shù)據(jù)庫在發(fā)布過程中若設(shè)置為指定時間廣播發(fā)送同步消息,無論訂閱數(shù)據(jù)庫是否收到消息,源數(shù)據(jù)庫發(fā)送后便終止嘗試發(fā)送,其無法保證訂閱數(shù)據(jù)庫及時有效的進(jìn)行數(shù)據(jù)同步。

2.3 復(fù)制同步技術(shù)

數(shù)據(jù)復(fù)制同步是指:數(shù)據(jù)必須實(shí)時,如果不是實(shí)時,那只能叫異步數(shù)據(jù)遷移;數(shù)據(jù)必須保證其準(zhǔn)確性,同步端接受的同步數(shù)據(jù)必須保證數(shù)據(jù)的唯一性;復(fù)制的數(shù)據(jù)可實(shí)時在線查詢;數(shù)據(jù)庫源數(shù)據(jù)不能被更改,其具有獨(dú)立性;復(fù)制過程中具有監(jiān)控機(jī)制。

在具備以上條件的由兩個及以上數(shù)據(jù)庫平臺在進(jìn)行數(shù)據(jù)庫復(fù)制的整個程序,將源數(shù)據(jù)庫中發(fā)生變化的需要復(fù)制的數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送給同步端需要數(shù)據(jù)變更的數(shù)據(jù)庫中,使得分布式系統(tǒng)得以實(shí)現(xiàn)數(shù)據(jù)同步,數(shù)據(jù)復(fù)制的整個過程是解決分布式系統(tǒng)數(shù)據(jù)同步的基礎(chǔ)組成部分。

當(dāng)前數(shù)據(jù)復(fù)制技術(shù)在各個企業(yè)信息管理平臺下應(yīng)用較為廣泛,其中Oracle數(shù)據(jù)庫中的DATAGUARD完全免費(fèi)并且支持?jǐn)嚯娎m(xù)傳,但在使用過程中需要打開歸檔模式并且寬帶傳輸要求比較高,并且對目的數(shù)據(jù)庫跟源數(shù)據(jù)庫的操作系統(tǒng)跟軟件版本有一定限制;還有支持Oracle、DB2等傳統(tǒng)關(guān)系型數(shù)據(jù)庫的HVR技術(shù),支持異構(gòu)數(shù)據(jù)庫,可實(shí)現(xiàn)一對多、多對一等復(fù)雜情況處理,但是需要單獨(dú)收費(fèi)。

上述兩種比較具體的數(shù)據(jù)復(fù)制技術(shù)在具體應(yīng)用過程中都有一定的局限性,選擇一種免費(fèi)的安全性,以及穩(wěn)定性較高的復(fù)制技術(shù)是實(shí)現(xiàn)數(shù)據(jù)同步的關(guān)鍵,本文結(jié)合Sql plus和Merge語句實(shí)現(xiàn)數(shù)據(jù)同步應(yīng)運(yùn)而生。

3 數(shù)據(jù)復(fù)制的變更數(shù)據(jù)捕捉方式(Data copy change data capture method)

變更數(shù)據(jù)捕捉是為了獲取自上次數(shù)據(jù)同步后需要同步的源數(shù)據(jù)庫中的數(shù)據(jù)表進(jìn)行插入、更新和刪除等活動需要變更的數(shù)據(jù)。變更數(shù)據(jù)是源數(shù)據(jù)庫中信息發(fā)生改變的數(shù)據(jù),變更的數(shù)據(jù)主要包括當(dāng)前變更數(shù)據(jù)的映像或者變化序列,還包括詳細(xì)的控制信息來保證數(shù)據(jù)差異性產(chǎn)生后的監(jiān)測與解決[3]。

2010年以來,使用次數(shù)比較多的數(shù)據(jù)捕獲方法包括基于數(shù)據(jù)日志法、基于觸發(fā)器法、基于API法、影子表法和控制變化法等幾種,結(jié)合不同方法實(shí)現(xiàn)過程中的不同原理介紹如下。

3.1 基于數(shù)據(jù)日志法

在數(shù)據(jù)庫操作過程中數(shù)據(jù)庫日志記錄了數(shù)據(jù)庫中對數(shù)據(jù)表進(jìn)行增、刪、改等操作信息,作為維護(hù)數(shù)據(jù)庫中數(shù)據(jù)信息的依據(jù)。它包含對數(shù)據(jù)庫中數(shù)據(jù)表增、刪、改等操作中100%正確的具體數(shù)據(jù)變更序列和數(shù)據(jù)操作信息,因此,可以把數(shù)據(jù)庫日志作為數(shù)據(jù)庫恢復(fù)以及維護(hù)數(shù)據(jù)完整性的重要工具。

基于數(shù)據(jù)庫日志的變更數(shù)據(jù)捕捉方法就是通過分析源數(shù)據(jù)庫日志中的操作和被操作的數(shù)據(jù)來確定復(fù)制對象的變化序列[1]?;跀?shù)據(jù)日志法的捕捉流程,如圖1所示。

基于數(shù)據(jù)日志法的好處在于它對任何類型的數(shù)據(jù)庫復(fù)制都適用,因?yàn)楫?dāng)前多個數(shù)據(jù)庫平臺都擁有日志文件,使用數(shù)據(jù)庫日志文件作為數(shù)據(jù)同步的基本方式,其優(yōu)點(diǎn)表現(xiàn)在耗費(fèi)極少的系統(tǒng)資源,并且更加方便快捷。但本方法也存在一些缺點(diǎn):在具體應(yīng)用中有些數(shù)據(jù)庫系統(tǒng)為保證其軟件的安全性而沒有向第三方公布其日志的存儲格式,使得要開發(fā)一個基于日志的變化捕捉的程序非常困難,除非在具體開發(fā)過程中向數(shù)據(jù)庫廠家索取相應(yīng)日志存儲格式以及日志文件相應(yīng)操作接口;為解決異構(gòu)數(shù)據(jù)庫數(shù)據(jù)復(fù)制問題,其數(shù)據(jù)模式、數(shù)據(jù)類型等方面有著不同的操作方式,還需要對通過系統(tǒng)日志提取出來的變化操作信息進(jìn)行一些處理。Oracle、MySql、Sql Server等主要數(shù)據(jù)庫廠商都使用的是基于日志的捕捉方法進(jìn)行數(shù)據(jù)復(fù)制。

3.2 基于觸發(fā)器法

基于觸發(fā)器法是在源數(shù)據(jù)庫中建立觸發(fā)器,實(shí)時監(jiān)控源數(shù)據(jù)庫中數(shù)據(jù)表的insert、delete、update等操作,當(dāng)對源數(shù)據(jù)對象進(jìn)行insert、delete、update操作時,觸發(fā)器將變化的數(shù)據(jù)表中的數(shù)據(jù)序列提取出來。其捕捉流程,如圖2所示。

基于觸發(fā)器法的優(yōu)點(diǎn)是Sql Server、Oracle等主流數(shù)據(jù)庫軟件都可以使用觸發(fā)器,并且在捕獲數(shù)據(jù)變化過程中耗時少有較高的應(yīng)用效率。但是使用觸發(fā)器捕捉變更數(shù)據(jù)的缺點(diǎn)是消耗操作系統(tǒng)物理資源比較大,在具體項目實(shí)現(xiàn)過程中相對較為復(fù)雜的邏輯業(yè)務(wù),使用觸發(fā)器過程中管理不便,并且當(dāng)前項目使用的數(shù)據(jù)庫系統(tǒng)若不支持觸發(fā)器,則觸發(fā)器復(fù)制方法失效。

3.3 基于API法

基于API法是解決當(dāng)前開發(fā)系統(tǒng)中使用的有些不具有觸發(fā)器接口和日志管理機(jī)制的非關(guān)系型等數(shù)據(jù)庫不能同步問題[3]。其在系統(tǒng)平臺和數(shù)據(jù)庫之間引入中間件,通過API中間件實(shí)現(xiàn)具有類似觸發(fā)器或者日志管理機(jī)制相似功能[4]。在項目具體開發(fā)過程中中間件的具體使用包括記錄需要復(fù)制的數(shù)據(jù)對象的變化序列,并且根據(jù)變化序列操作相應(yīng)數(shù)據(jù)庫的數(shù)據(jù)表從而完成數(shù)據(jù)復(fù)制的功能,基于API法的捕捉流程,如圖3所示。

在具體使用過程中,基于API法的優(yōu)點(diǎn)是使用的系統(tǒng)資源基本不足1%,并且可以根據(jù)需求與絕大多數(shù)復(fù)制數(shù)據(jù)類型相互匹配;它還是有一定的不足,其表現(xiàn)在不能記錄源數(shù)據(jù)庫的操作過程,例如使用數(shù)據(jù)操縱語言在CMD命令行中進(jìn)行新增,更新,刪除操作時所造成的數(shù)據(jù)變更,API無法監(jiān)控到,除此之外在使用API法操作海量級數(shù)據(jù)復(fù)制過程中,由于數(shù)據(jù)處理的邏輯性較高,可能會造成程序運(yùn)行效率低下[4]。

3.4 影子表法

影子表法是在數(shù)據(jù)庫初始化時為需要操作的對象表(T)建立與之相對應(yīng)的影子表(S),其原理是在時間節(jié)點(diǎn)A時刻記錄一份對象表(T)的數(shù)據(jù)并且將其存儲進(jìn)影子表(S),對象表(T)操作完成后的時間節(jié)點(diǎn)B時刻將對象表(T)與影子表(S)進(jìn)行內(nèi)容對比獲取增量數(shù)據(jù)內(nèi)容用于目的數(shù)據(jù)庫進(jìn)行數(shù)據(jù)復(fù)制[5]?;谟白颖矸ǖ牟蹲搅鞒?,如圖4所示。

基于影子表法能基于任何一個數(shù)據(jù)庫完成,并且程序只需編寫一次便可以在多種系統(tǒng)平臺下運(yùn)行。其程序運(yùn)行消耗是使用很低的管理成本和與對象表一樣的存儲空間即可,具體操作過程中其傳輸?shù)臄?shù)據(jù)只是增量,具有較高的工作效率。但是這種方式的缺陷是得到的僅僅是發(fā)生變化的增量數(shù)據(jù),而沒有記錄下中間操作過程的信息,故不能提供足夠的控制信息用以完成數(shù)據(jù)回滾。

以上四種變化捕捉方式機(jī)制和資源等的比較,詳見表1。

4 跨平臺Oracle數(shù)據(jù)庫同步設(shè)計方案(Cross platform Oracle database synchronization design)

本論文研究的是在分布式異構(gòu)數(shù)據(jù)庫環(huán)境下,由系統(tǒng)管理員啟動此同步程序,從而將省局的Linux服務(wù)器中下的Oracle數(shù)據(jù)庫中的數(shù)據(jù)單向同步到Windows服務(wù)器下的Oracle數(shù)據(jù)庫中。若數(shù)據(jù)有變更,只更新變更數(shù)據(jù),如圖5所示。

結(jié)合此系統(tǒng)的背景和需求,該系統(tǒng)要實(shí)現(xiàn)的同步過程的目標(biāo)包括:

(1)高效快捷:系統(tǒng)中涉及險情等信息,在緊急情況下,省級數(shù)據(jù)庫數(shù)據(jù)要能通過系統(tǒng)立即更新到Windows數(shù)據(jù)庫中,故該同步應(yīng)能保證在即時狀態(tài)下實(shí)現(xiàn)省中心數(shù)據(jù)庫與Windows數(shù)據(jù)庫的數(shù)據(jù)的一致。

(2)查看方便:能反映出同步狀況,提供一個便于查看和分析的方式。

(3)準(zhǔn)確無誤:應(yīng)能確保數(shù)據(jù)傳輸結(jié)果的正確性。

(4)安全可靠:此系統(tǒng)是數(shù)據(jù)管理部門對整個數(shù)據(jù)管理過程中所有資料數(shù)據(jù)進(jìn)行管理的重要工具,因此在系統(tǒng)的設(shè)計、開發(fā)中必須重視系統(tǒng)的安全性和可靠性。

具體實(shí)施步驟如下:

步驟一:在Linux服務(wù)器上的Oracle數(shù)據(jù)庫創(chuàng)建用戶并賦予權(quán)限,如圖6所示。

步驟二:在Windows服務(wù)器上的Oracle數(shù)據(jù)庫創(chuàng)建DBlink,如圖7所示。

步驟三:調(diào)用web服務(wù)器相應(yīng)數(shù)據(jù)同步函數(shù)進(jìn)行同步操作,如圖8所示。

步驟四:web服務(wù)器通過調(diào)用Sql plus程序處理相應(yīng)表的*.sql文件,如圖9所示。

通過以上步驟實(shí)現(xiàn)了跨平臺Orale數(shù)據(jù)庫的數(shù)據(jù)同步功能其在數(shù)據(jù)捕獲上的具體性能,詳見表2。

5 結(jié)論(Conclusion)

本文描述了以J2EE為平臺對跨平臺Oracle數(shù)據(jù)庫的同步模塊的具體實(shí)現(xiàn)方法。其采用Sql plus動態(tài)調(diào)用Merge語句來作為變更數(shù)據(jù)的捕捉方式。這種方式靈活易實(shí)現(xiàn),對模塊進(jìn)行測試后得出該模塊能保證數(shù)據(jù)的準(zhǔn)確傳輸,并且對復(fù)制對象的表可進(jìn)行自定義,但是也存在一定的局限性就是web服務(wù)器上必須安裝有Sql plus客戶端。

參考文獻(xiàn)(References)

[1] 覃章榮,張軍洲,諸葛雋.基于Web Service的異構(gòu)數(shù)據(jù)庫同步系統(tǒng)設(shè)計與實(shí)現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2009,19(12):221-224.

[2] 劉瀟,邵定宏.基于多代理的異構(gòu)數(shù)據(jù)庫轉(zhuǎn)換系統(tǒng)的實(shí)現(xiàn)[J].化工自動化及儀表,2012(04):518-520.

[3] 傅穎勛,羅圣美,舒繼武.一種云存儲環(huán)境下的安全網(wǎng)盤系統(tǒng)[J].軟件學(xué)報,2014,25(08):1831-1843.

[4] 李林,等.田間數(shù)據(jù)傳輸同步策略與中間件研究[J].農(nóng)業(yè)機(jī)械學(xué)報,2016,47(1):279-288.

[5] 鮑愛華,等.基于哈希樹的分布式目錄同步方法[J].解放軍理工大學(xué)學(xué)報,2013,14(6):608-616.

作者簡介:

劉娟娟(1983-),女,本科,助理工程師.研究領(lǐng)域:軟件開發(fā).

劉 帥(1983-),男,本科,副高級工程師.研究領(lǐng)域:軟件開發(fā).

印江| 特克斯县| 衡东县| 若尔盖县| 垦利县| 济宁市| 铜鼓县| 长阳| 康马县| 清水河县| 邢台市| 枣庄市| 广东省| 伊宁市| 景德镇市| 易门县| 奉新县| 米易县| 辽宁省| 孟津县| 万山特区| 武胜县| 九龙县| 阳朔县| 利川市| 时尚| 江川县| 亳州市| 武安市| 增城市| 晋江市| 图木舒克市| 社会| 新乡县| 思茅市| 金坛市| 丽江市| 阳泉市| 建阳市| 寿光市| 随州市|