郭哲鋒
[摘 要]如何高效、安全地保持?jǐn)?shù)據(jù)庫之間數(shù)據(jù)同步是當(dāng)前數(shù)據(jù)庫技術(shù)研究熱點(diǎn)問題。本文對于分布式數(shù)據(jù)庫系統(tǒng)同步傳輸技術(shù),通過數(shù)據(jù)庫同步機(jī)制研究解決了多級數(shù)據(jù)庫信息交換過程中上下級數(shù)據(jù)庫數(shù)據(jù)不一致問題。
[關(guān)鍵詞]分布式數(shù)據(jù)庫 同步傳輸 MobiLink 觸發(fā)器
隨著企業(yè)的不斷發(fā)展和壯大,企業(yè)的各子部門地處于不同區(qū)域的情況越來越多,為了使企業(yè)異地使用相同的數(shù)據(jù),大多數(shù)企業(yè)都采用了數(shù)據(jù)庫提供的同步技術(shù)來解決這一問題,但該方法操作難度較大,而數(shù)據(jù)庫提供的同步技術(shù)也會因網(wǎng)絡(luò)、電力等原因造成時間同步無法進(jìn)行,引起數(shù)據(jù)的丟失等[1]。本文就如何高效、安全地保持分布式數(shù)據(jù)庫之間數(shù)據(jù)同步進(jìn)行研究,以期解決以上問題。
一、分布式數(shù)據(jù)庫同步技術(shù)理論概述
(一)分布式數(shù)據(jù)庫概述及特點(diǎn)
分布式數(shù)據(jù)庫(Distributed Database, DDB)是計算機(jī)網(wǎng)絡(luò)環(huán)境中各場地(Site)或結(jié)點(diǎn)(Node)上數(shù)據(jù)庫的邏輯集合。一般稱傳統(tǒng)方式的數(shù)據(jù)庫為集中式數(shù)據(jù)庫(Centralized Database, CDB);稱分布式數(shù)據(jù)庫系統(tǒng)中的各場地數(shù)據(jù)庫為局部數(shù)據(jù)庫(Local Database, LDB),是物理的數(shù)據(jù)庫;稱分布式數(shù)據(jù)庫為全局?jǐn)?shù)據(jù)庫(Global Database, GDB),是邏輯的數(shù)據(jù)庫。分布式數(shù)據(jù)庫具有分布性和邏輯協(xié)調(diào)性。分布性是指數(shù)據(jù)不是存放在單一場地為單個計算機(jī)配置的存儲設(shè)備上,而是按全局需要將數(shù)據(jù)劃分成一定結(jié)構(gòu)的數(shù)據(jù)子集,分散地存儲在各個場地上;邏輯協(xié)調(diào)性是指各場地上的數(shù)據(jù)子集,相互間由嚴(yán)密的約束規(guī)則加以限定而在邏輯上是一個整體。
(二)數(shù)據(jù)庫同步技術(shù)
通過交換每個成員中所有已更新的記錄和對象, 來更新一個副本集的兩個成員的過程。當(dāng)每個副本集內(nèi)的更改都相互應(yīng)用于另一個副本集時, 兩個副本集成員就實(shí)現(xiàn)了同步。數(shù)據(jù)庫同步又分三種[2]:直接同步,即用于在直接連接到局域網(wǎng)的副本之間對數(shù)據(jù)進(jìn)行同步的方法, 可通過共享的網(wǎng)絡(luò);文件夾使用間接同步,即一種用于斷開連接環(huán)境中( 如帶著便攜式計算機(jī)外出時) 的同步方法,必須用“復(fù)制管理器”來配置間接同步;Internet 同步,用于將已配置了 Internet 服務(wù)器的脫機(jī)環(huán)境中的副本同步。必須使用“復(fù)制管理器”來配置 Internet 同步。
(三)緩沖池技術(shù)
一個緩沖池是與單個數(shù)據(jù)庫相關(guān)聯(lián)的,可以被多個表空間使用。當(dāng)考慮將緩沖池用于一個或多個表空間時,必須保證表空間頁大小和緩沖池頁大小對于緩沖池所“服務(wù)”的所有表空間而言都是一樣的。一個表空間只能使用一個緩沖池。數(shù)據(jù)庫連接緩沖池,其實(shí)就是保存數(shù)據(jù)庫連接的一個集合。需要數(shù)據(jù)庫連接緩沖池是因?yàn)槊看螌?shù)據(jù)庫的開閉都是非常耗時耗資源的,如果并發(fā)請求過大,可能就導(dǎo)致系統(tǒng)反應(yīng)緩慢甚至造成崩潰。
(四) 觸發(fā)器實(shí)現(xiàn)算法簡介
當(dāng)前數(shù)據(jù)庫應(yīng)用的一個普遍要求是數(shù)據(jù)庫管理系統(tǒng)能夠在一些數(shù)據(jù)庫相關(guān)事件發(fā)生時觸發(fā)預(yù)先定義的操作,實(shí)現(xiàn)信息管理的自動化,因此引進(jìn)了觸發(fā)器機(jī)制。觸發(fā)器可以增強(qiáng)引用完整性,加強(qiáng)復(fù)雜業(yè)務(wù)的規(guī)則,或者監(jiān)控數(shù)據(jù)庫的變動,并執(zhí)行一定的數(shù)據(jù)操作。觸發(fā)器機(jī)制實(shí)現(xiàn)主要涉及觸發(fā)事件的檢測以及觸發(fā)條件的判決等關(guān)鍵技術(shù)問題,以及對觸發(fā)器的編譯存儲和調(diào)用執(zhí)行等具體操作。
觸發(fā)器事件檢測機(jī)制包括對事件的檢測和存儲,是實(shí)現(xiàn)觸發(fā)器的關(guān)鍵。觸發(fā)器的條件判決機(jī)制是觸發(fā)器的核心,根據(jù) SQL99 標(biāo)準(zhǔn)的定義,可以將觸發(fā)器分為前觸發(fā)、約束判定和后觸發(fā)三種類型。觸發(fā)器的更新操作是對一個觸發(fā)器進(jìn)行編譯后,替換已存在的作用在同一個表上的同名觸發(fā)器,基本操作與觸發(fā)器的創(chuàng)建是一致的;觸發(fā)器的刪除操作步驟主要是在數(shù)據(jù)字典中對指定的觸發(fā)器進(jìn)行查詢并刪除。
二、需求分析
(一)系統(tǒng)功能
分布式數(shù)據(jù)庫同步系統(tǒng)主要完成對于網(wǎng)絡(luò)中數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)同步操作及相關(guān)設(shè)置,通過編寫程序?qū)崿F(xiàn)網(wǎng)絡(luò)中對于 Oracle,MS SQL Sever 等數(shù)據(jù)庫之間數(shù)據(jù)的同步操作。利用緩沖池技術(shù)提供數(shù)據(jù)交換的安全保障,確保數(shù)據(jù)在同步過程中保持?jǐn)?shù)據(jù)的一致性。采用標(biāo)準(zhǔn)的數(shù)據(jù)通訊方式,以及標(biāo)準(zhǔn)的同步交換協(xié)議。實(shí)現(xiàn)主數(shù)據(jù)庫對結(jié)點(diǎn)Oracle 數(shù)據(jù)庫,MS SQL Sever 數(shù)據(jù)庫數(shù)據(jù)的同步。觸發(fā)同步機(jī)制,使得主數(shù)據(jù)庫與結(jié)點(diǎn)數(shù)據(jù)庫數(shù)據(jù)保持一致性。 定制對異構(gòu)數(shù)據(jù)庫自動同步操作,可以實(shí)現(xiàn)按預(yù)定規(guī)則實(shí)現(xiàn)定時更新數(shù)據(jù)庫數(shù)據(jù)。
(二)總體設(shè)計
分布式數(shù)據(jù)庫數(shù)據(jù)同步系統(tǒng)由變化捕獲、日志還原、同步觸發(fā)、通訊和數(shù)據(jù)更新等 5 個模塊組成。變化捕獲模塊負(fù)責(zé)捕獲變化并記錄日志;日志還原模塊把變更操作還原成數(shù)據(jù)庫語句;同步觸發(fā)模塊根據(jù)同步策略激活通訊發(fā)送;通訊模塊負(fù)責(zé)數(shù)據(jù)的發(fā)送與接收;數(shù)據(jù)更新模塊負(fù)責(zé)把傳送過來的數(shù)據(jù)更新到目標(biāo)數(shù)據(jù)庫。
對于整個系統(tǒng)功能模塊來講,分布式數(shù)據(jù)庫同步系統(tǒng)包含五個基本功能模塊:啟動 ORA 同步,啟動 MMS 同步,自動同步,同步 ORA,同步 SQL。(1)啟動 ORA 同步,在主機(jī)數(shù)據(jù)庫所在服務(wù)器啟動 ORA 同步服務(wù);(2)啟動 MMS 同步,在主機(jī)數(shù)據(jù)庫所在服務(wù)器啟動 SQL 同步服務(wù);(3)自動同步,在主機(jī)數(shù)據(jù)庫所在服務(wù)器啟動自動同步服務(wù),使得同步工作按照預(yù)定設(shè)置的條件進(jìn)行自動同步服務(wù);(4)同步 ORA,對于網(wǎng)絡(luò)中主機(jī)數(shù)據(jù)庫與 ORA 的結(jié)點(diǎn)數(shù)據(jù)庫進(jìn)行同步工作,同步以后使得主數(shù)據(jù)庫與 ORA 的結(jié)點(diǎn)數(shù)據(jù)庫數(shù)據(jù)保持一致;(5)同步 SQL,對于網(wǎng)絡(luò)中主機(jī)數(shù)據(jù)庫與 SQL 結(jié)點(diǎn)數(shù)據(jù)庫進(jìn)行同步工作,同步以后使得主數(shù)據(jù)庫與 SQL 的結(jié)點(diǎn)數(shù)據(jù)庫數(shù)據(jù)保持一致。
三、系統(tǒng)設(shè)計關(guān)鍵技術(shù)分析
(一)系統(tǒng)配置介紹
通用數(shù)據(jù)傳輸平臺基于選定的 MobiLink 技術(shù)作為軟件開發(fā)的技術(shù)支持,使用Sybase ASA8.0 作為 MobiLink 的客戶端與同步服務(wù)器。通用數(shù)據(jù)傳輸平臺系統(tǒng)具有傳輸對象的配置與定義功能,采用基于傳輸緩沖池的數(shù)據(jù)同步傳輸與日志傳輸技術(shù),以撥號網(wǎng)絡(luò)作為主要應(yīng)用環(huán)境,同時支持實(shí)時網(wǎng)絡(luò)傳輸環(huán)境。通用數(shù)據(jù)傳輸平臺體現(xiàn)了通用性、高效性、安全性和穩(wěn)定性。
(二)MobiLink 技術(shù)概述
MobiLink 技術(shù)一種基于發(fā)布/訂閱方式的異步消息中間件技術(shù)[3]。主要是以MobiLink 客戶端在建立 MobiLink 用戶的基礎(chǔ)上完成單向的同步發(fā)布/同步預(yù)訂,MobiLink 同步服務(wù)器只需要處于啟動的狀態(tài),使 MobiLink 客戶端通過 MobiLink 同步服務(wù)器來進(jìn)行同步。
1.MobiLink 的同步過程技術(shù)
同步會話是 MobiLink 客戶端和同步服務(wù)器之間的雙向數(shù)據(jù)交換過程,始終由客戶端開始進(jìn)行同步過程。在此過程中,客戶端必須建立并維護(hù)與同步服務(wù)器的連接。如果成功,此會話將使遠(yuǎn)程數(shù)據(jù)庫和統(tǒng)一數(shù)據(jù)庫保持相互一致的狀態(tài)。同步過程中包括上載和下載兩部分。 對于數(shù)據(jù)行的上載,MobiLink 客戶端準(zhǔn)備并發(fā)送一個上載流,它包含從上次同步后在 MobiLink 客戶端經(jīng)過更新、插入或刪除的所有行的列表。類似地,對于數(shù)據(jù)行的下載,MobiLink 同步服務(wù)器準(zhǔn)備并發(fā)送一個下載流,它包含插入、更新和刪除的列表。
2.MobiLink 的同步腳本
MobiLink 同步邏輯由存儲在統(tǒng)一數(shù)據(jù)庫中的腳本組成,這些腳本可以是單個語句,也可以是存儲過程調(diào)用。在同步過程中,MobiLink 同步服務(wù)器將讀取這些腳本,并對統(tǒng)一數(shù)據(jù)庫執(zhí)行這些腳本。腳本為您提供了在同步過程中的不同時間點(diǎn)執(zhí)行任務(wù)的機(jī)會。您可以使用 Sybase Central,也可以使用存儲過程將腳本添加到統(tǒng)一數(shù)據(jù)庫中。
每個腳本對應(yīng)于同步過程中的一個特定事件。僅當(dāng)某個操作必須發(fā)生時才編寫腳本。所有不必要的事件都無需定義。同步過程的兩個主要部分是處理上載的信息和準(zhǔn)各要下載的行。MobiLink同步服務(wù)器將在首次需要某一校本時讀取它進(jìn)行準(zhǔn)各,只讀取和準(zhǔn)備一次。只要一個事件被激活,便執(zhí)行與其關(guān)聯(lián)的腳本。大多數(shù)同步腳本都接受來自MobiLink同步服務(wù)器的參數(shù)您可以在腳本中使用這些參數(shù),通過在腳本中放置問號即可做到這一點(diǎn)。腳本是以組的方式進(jìn)行組織的,這些組被稱為腳本版本。通過指定特定的版本,MobiLink 客戶端可以選擇使用哪一組同步腳本來處理上載流及準(zhǔn)備下載流。
3.MobiLink 的同步方式
MobiLink 的同步方式可以分為兩種[4]:1.基于時間戳的同步。時間戳方法是可以進(jìn)行高效的同步的最實(shí)用的通用技術(shù)。此項(xiàng)技術(shù)涉及跟蹤每個用戶上次進(jìn)行同步的時間,并使用此信息控制下載到每個遠(yuǎn)程數(shù)據(jù)庫的行。MobiLink保留了一個用以說明每個 MobiLink 用戶上一次下載數(shù)據(jù)的時間的時間戳值。該值被稱為上次下載的時間戳。上次下載的時間戳將作為一個參數(shù)被提供給許多事件,該時間戳還可以在同步腳本中使用。2.快照同步?;跁r間戳的同步適合于大多數(shù)同步。不過,有時候可能需要更新數(shù)據(jù)快照。表的快照同步是指完全下載表中的所有相關(guān)行,而不考慮這些行以前是否已經(jīng)下載。這是最簡單的同步方法,但會引起大量的不必要的數(shù)據(jù)集交換,從而導(dǎo)致性能下降??梢允褂每煺胀较螺d表中的所有行,或者將此方法與在遠(yuǎn)程數(shù)據(jù)庫之間對行進(jìn)行分區(qū)中描述的行分區(qū)方法結(jié)合使用??煺胀阶钸m合用于同時具有以下兩種特征的表:(1)行數(shù)相對較少:當(dāng)表中行數(shù)比較少時,下載所有行所產(chǎn)生的開銷也會相對較小。(2)行信息經(jīng)常更改:當(dāng)表中的大多數(shù)行頻繁進(jìn)行更改時,采用顯式排除上次同步后未發(fā)生更改的行的方法就沒有太大的必要。
(三)數(shù)據(jù)庫設(shè)計
分布式數(shù)據(jù)同步系統(tǒng)采用緩沖池技術(shù)來確保數(shù)據(jù)傳輸?shù)陌踩院鸵恢滦?,根?jù)系統(tǒng)分析:(1)主機(jī)數(shù)據(jù)庫主要由三部分組成:用戶信息表,本地數(shù)據(jù)庫表,傳輸緩沖池表;(2)子機(jī)數(shù)據(jù)庫主要有兩部分組成:本地數(shù)據(jù)庫表和傳輸緩沖池表。
(四)數(shù)據(jù)庫同步過程分析
數(shù)據(jù)庫同步系統(tǒng)同步數(shù)據(jù)總體同步過程如下:(1)用戶登陸,根據(jù)用戶信息表進(jìn)行登陸操作;(2)啟動同步,針對不同的數(shù)據(jù)庫啟動對應(yīng)的同步服務(wù);(3)同步數(shù)據(jù),同步操作開始;(4)比較緩沖池數(shù)據(jù),如果相同說明雙方數(shù)據(jù)一致,同步結(jié)束;如果不同則更新緩沖池當(dāng)中的數(shù)據(jù),直到兩個緩沖池當(dāng)中的數(shù)據(jù)再次達(dá)到一致;(5)更新緩沖池數(shù)據(jù);(6)更新本地數(shù)據(jù)庫數(shù)據(jù);(7)同步結(jié)束。
四、結(jié)論
隨著分布式數(shù)據(jù)庫廣泛應(yīng)用于各個行業(yè),異構(gòu)數(shù)據(jù)庫海量數(shù)據(jù)傳輸成為計算機(jī)研究人員關(guān)注的焦點(diǎn),本文研究了分布式數(shù)據(jù)庫之間數(shù)據(jù)同步,采用傳輸緩沖池同步技術(shù),確保發(fā)送數(shù)據(jù)庫與接收數(shù)據(jù)庫數(shù)據(jù)的一致性。
參考文獻(xiàn)
[1]宋俊蘇。分布式數(shù)據(jù)庫在高職院校辦公自動化管理系統(tǒng)中的應(yīng)用[J]電腦知識與技術(shù), 2009,08
[2]邵佩英。分布式數(shù)據(jù)庫系統(tǒng)及其應(yīng)用(第二版)北京:科學(xué)出版社,2005:10~11
[3]Richard Staehli,F(xiàn)rank Eliassen,Sten Amundsen。Designing Adaptive Middleware for Reuse[A]Middleware 2004 Companion[C]Toronto: IFIP International Federation for Information Processing, 2004: pp.153~157
[4]馬新娜,牛存良,石玉晶等。異構(gòu)數(shù)據(jù)庫互動中間件的設(shè)計與應(yīng)用。微機(jī)發(fā)展,2004(4)