馬錫坤
南京軍區(qū)南京總醫(yī)院 信息科,江蘇南京 210002
基于Oracle的在線式應(yīng)用容災(zāi)系統(tǒng)的建立
馬錫坤
南京軍區(qū)南京總醫(yī)院 信息科,江蘇南京 210002
本文介紹了DSG Real Sync軟件的特點及工作原理;詳細(xì)闡述了采用DSG RealSync軟件構(gòu)建我院在線式應(yīng)用容災(zāi)系統(tǒng)的全過程。
“軍字一號”;在線式應(yīng)用容災(zāi)系統(tǒng);應(yīng)用容災(zāi);數(shù)據(jù)容災(zāi)
長期以來,國內(nèi)大部分醫(yī)院信息系統(tǒng)(HIS)并沒有建成有效的容災(zāi)機(jī)制,只要數(shù)據(jù)庫出現(xiàn)問題,就必然導(dǎo)致非常嚴(yán)重的后果。也有些醫(yī)院采用了相應(yīng)的備份系統(tǒng),但僅僅通過備份方式無從保證業(yè)務(wù)運行的連續(xù)性[1],當(dāng)服務(wù)器真正宕掉的時侯,就會造成業(yè)務(wù)中斷,影響醫(yī)院的正常工作。因此,HIS有必要建立一套能保障業(yè)務(wù)連續(xù)運行的容災(zāi)系統(tǒng)[2-3]。
應(yīng)用容災(zāi)系統(tǒng)是在數(shù)據(jù)容災(zāi)的基礎(chǔ)上,在異地建立一套完整的與本地生產(chǎn)系統(tǒng)相當(dāng)?shù)膫浞輵?yīng)用系統(tǒng),在災(zāi)難情況下,遠(yuǎn)程系統(tǒng)迅速接管業(yè)務(wù)運行。數(shù)據(jù)容災(zāi)是抗御災(zāi)難的保障,而應(yīng)用容災(zāi)則是容災(zāi)系統(tǒng)建設(shè)的目標(biāo)?!败娮忠惶枴毕到y(tǒng)和門急診信息系統(tǒng)是我院主要的業(yè)務(wù)系統(tǒng),系統(tǒng)后臺采用的是Oracle數(shù)據(jù)庫。在充分調(diào)研論證的基礎(chǔ)上,我們采用DSG RealSync軟件實現(xiàn)數(shù)據(jù)的異構(gòu)實時復(fù)制,把位于外科樓網(wǎng)絡(luò)中心機(jī)房主設(shè)備上的Oracle數(shù)據(jù)實時復(fù)制到門診機(jī)房的備用設(shè)備,如果主設(shè)備不可用時,“軍字一號”系統(tǒng)和門急診系統(tǒng)切換到備用設(shè)備,確保了“軍字一號”系統(tǒng)和門急診信息系統(tǒng)不間斷運行,實現(xiàn)應(yīng)用系統(tǒng)容災(zāi)[4]。
DSG RealSync通過交易復(fù)制的方式,將生產(chǎn)數(shù)據(jù)庫的全部數(shù)據(jù)或者部分表實時復(fù)制到目標(biāo)系統(tǒng)上。安裝在源系統(tǒng)運行數(shù)據(jù)庫實例服務(wù)器上的模塊包括:日志分析模塊、交易合成模塊、數(shù)據(jù)傳輸(輸出端)模塊、用于從已有的表中批量導(dǎo)出數(shù)據(jù)的模塊(用于系統(tǒng)初始化);安裝在復(fù)制目標(biāo)系統(tǒng)運行數(shù)據(jù)庫實例服務(wù)器上的模塊包括:數(shù)據(jù)傳輸(輸入端)模塊、交易合成模塊、用于從已有的表中導(dǎo)出數(shù)據(jù)的批量裝載的模塊(用于系統(tǒng)初始化)。DSG RealSync對日志進(jìn)行分析,得到交易信息再進(jìn)行傳送。由RealSync構(gòu)建的容災(zāi)系統(tǒng)是可驗證的方案,是在線式應(yīng)用容災(zāi),目標(biāo)端數(shù)據(jù)庫是在線打開的,從而保證了容災(zāi)系統(tǒng)的可用性[5]。
2.1 數(shù)據(jù)庫復(fù)制過程
DSG RealSync采用的數(shù)據(jù)庫復(fù)制技術(shù)與傳統(tǒng)的數(shù)據(jù)復(fù)制技術(shù)不同,DSG RealSync技術(shù)是針對數(shù)據(jù)庫提供了基于邏輯的交易復(fù)制方式。該方式通過直接捕獲源數(shù)據(jù)庫的交易,將數(shù)據(jù)庫的改變邏輯復(fù)制到目標(biāo)系統(tǒng)數(shù)據(jù)庫中,實現(xiàn)源系統(tǒng)和目標(biāo)系統(tǒng)數(shù)據(jù)的一致性。其工作原理,見圖1。
DSG RealSync在源端和目標(biāo)端分別安裝代理進(jìn)程,源端的代理進(jìn)程對Oracle日志進(jìn)行監(jiān)控,發(fā)現(xiàn)源數(shù)據(jù)改變可及時對目標(biāo)數(shù)據(jù)庫進(jìn)行更新。當(dāng)應(yīng)用系統(tǒng)在源端向數(shù)據(jù)庫進(jìn)行任何操作時,這些信息都將在重做日志中保存,RealSync代理通過對實時獲取的日志進(jìn)行分析,獲得本次操作的交易指令和交易數(shù)據(jù),然后將這些交易指令和交易數(shù)據(jù)經(jīng)過格式轉(zhuǎn)化生成DXF數(shù)據(jù)格式,并實時通過網(wǎng)絡(luò)傳送到目標(biāo)系統(tǒng)。目標(biāo)系統(tǒng)的RealSync代理接收數(shù)據(jù)庫包,經(jīng)過校驗碼檢查,確認(rèn)正確的數(shù)據(jù)庫包后,調(diào)用Oracle函數(shù)按照交易的先后順序在目標(biāo)系統(tǒng)中執(zhí)行該交易。其中,DXF(DSG Extend Format)格式是DSG公司的專有技術(shù),該技術(shù)是DSG公司用來表達(dá)SQL指令的方式,該數(shù)據(jù)格式能夠通過DSG的專有轉(zhuǎn)換算法直接轉(zhuǎn)換為Oracle的內(nèi)部數(shù)據(jù)表達(dá)格式,但在分析和轉(zhuǎn)載時需要最小的轉(zhuǎn)化,以提高分析和裝載速度,減少資源占用、豐富能夠表達(dá)的各種數(shù)據(jù)類型。
圖1 DSG RealSync數(shù)據(jù)庫復(fù)制技術(shù)工作原理
2.2 數(shù)據(jù)的一致性和完整性
DSG RealSync在數(shù)據(jù)的一致性和完整性方面的保證主要通過以下幾個方面實現(xiàn):
(1)保證交易的先后順序。嚴(yán)格按照源端交易執(zhí)行順序在目標(biāo)端加載,嚴(yán)格的I/O順序是保證系統(tǒng)邏輯正確的關(guān)鍵因素,RealSync通過對交易的SCN進(jìn)行判斷,并嚴(yán)格保證源系統(tǒng)上先提交的交易在目標(biāo)端也是先裝載。
(2)檢查日志跟蹤的連續(xù)性。RealSync在每次日志讀取結(jié)束時,都將記錄當(dāng)前讀取的日志的Sequence No,Block No和最后讀取的Offset。當(dāng)下次讀取文件時,總是需要檢查是否和上次讀取的位置嚴(yán)格連續(xù),從而保證對日志分析的完整性。
(3)數(shù)據(jù)的一致性檢查。RealSync提供數(shù)據(jù)一致性檢查工具,用來比較源端的記錄和目標(biāo)端的記錄是否完全一致。如果出現(xiàn)數(shù)據(jù)不一致,RealSync將對不一致的部分進(jìn)行修復(fù)。
2.3 DSG RealSync特點
(1)對生產(chǎn)系統(tǒng)的低干擾性。DSG RealSync實時數(shù)據(jù)復(fù)制技術(shù)不需要通過任何數(shù)據(jù)庫的引擎來獲取變更數(shù)據(jù),而是通過數(shù)據(jù)庫自身的信息獲取源系統(tǒng)上的改變并傳送給目標(biāo)系統(tǒng),不會對生產(chǎn)系統(tǒng)造成性能影響。
(2)系統(tǒng)異構(gòu),可提供更多的優(yōu)化空間。源數(shù)據(jù)庫系統(tǒng)和目標(biāo)數(shù)據(jù)庫系統(tǒng)的可異構(gòu),主要包括索引規(guī)則和存儲參數(shù)(數(shù)據(jù)塊大小、回滾段等)。因此,可以在目標(biāo)數(shù)據(jù)庫上根據(jù)業(yè)務(wù)特點進(jìn)行調(diào)整和優(yōu)化,完全不受源系統(tǒng)的限制。
(3)支持的多種復(fù)制策略。DSG RealSync可以被靈活配置,以支持各種復(fù)制策略,支持各種增值應(yīng)用,如一對一單向復(fù)制;一對多復(fù)制;多對一復(fù)制等,支持實時復(fù)制、定時復(fù)制、手工復(fù)制等多種同步模式,并可按需復(fù)制。RealSync是基于TCP/IP的復(fù)制系統(tǒng),借助現(xiàn)有的網(wǎng)絡(luò)技術(shù),對距離沒有限制。
3.1 日志抓取
RealSync對數(shù)據(jù)的抓取是通過安裝在源數(shù)據(jù)端的代理模塊,定時分析Oracle重做日志來獲取源端的交易類型及數(shù)據(jù)的。RealSync代理在判斷源端的Oracle系統(tǒng)是否有新的交易產(chǎn)生時是通過定期檢查Oracle控制文件中記錄的當(dāng)前SCN來判斷的,這樣就避免了每次檢查都通過讀取日志文件來判斷是否有新的交易產(chǎn)生造成的系統(tǒng)影響。在控制文件中確認(rèn)有新的交易產(chǎn)生時,可以同時獲得當(dāng)前的重做日志組,以及最新日志在日志文件的最新位置。RealSync 代理模塊根據(jù)這些信息將上次抓取時記錄的日志位置與本次讀取的最新位置之間的日志讀取并加以分析。然后將這些數(shù)據(jù)保存在在線日志緩存文件中,等待下一步作交易合成處理。
3.2 日志分析
Oracle數(shù)據(jù)庫的所有更改都記錄在日志中,其中記錄了對數(shù)據(jù)庫中的每一個變化。當(dāng)我們需要了解數(shù)據(jù)庫中所作的交易時,一個最有效實用而又低成本的方法就是分析Oracle數(shù)據(jù)庫的日志文件。RealSync代理集成了DSG的優(yōu)秀日志分析功能,該功能完全不同于Oracle提供的Logminer日志分析工具,在性能和功能上有了很大提高,其主要體現(xiàn)在系統(tǒng)性能的優(yōu)化上,大幅度提高了日志分析的速度,使得對于高并發(fā)業(yè)務(wù)系統(tǒng)的復(fù)制成為可能。RealSync通過對日志的分析,得到該數(shù)據(jù)庫中的每個SQL指令,并將這些SQL指令生成DXF格式的表達(dá)方式。
3.3 交易合成
為了提高系統(tǒng)的可控制性、保證邏輯完整性、避免數(shù)據(jù)丟失,將復(fù)制的最小單位為一個交易,而不是單個SQL指令為復(fù)制單位,這樣在目標(biāo)端的交易裝載更加容易控制。同時,對于復(fù)制的數(shù)據(jù)而言,只有那些提交的數(shù)據(jù)對于目標(biāo)系統(tǒng)是有意義的,而對于那些回退的數(shù)據(jù)無需復(fù)制到目標(biāo)系統(tǒng)上。所以RealSync在復(fù)制過程中不是復(fù)制每個SQL語句,而是對抓取的數(shù)據(jù)進(jìn)行交易整合后以交易為單位進(jìn)行復(fù)制,同時只復(fù)制提交的交易。交易合成模塊首先按照交易序號對SOL語句進(jìn)行劃分,每個交易包含多條SOL語句。然后,以交易為單位進(jìn)行處理,將已經(jīng)提交的交易,傳至傳輸處理模塊;將未提交的交易保存在本地,一旦通過日志得知保存的未提交交易已發(fā)提交,立即將該交易發(fā)送到傳輸處理模塊;對回退的交易作丟棄處理。
3.4 交易傳輸
RealSync為了保證數(shù)據(jù)傳輸?shù)陌踩?、可靠,在傳輸處理上作了特殊的處理與支持:數(shù)據(jù)在傳輸之前首先存入源端的緩存,傳輸進(jìn)程從緩存中讀取交易數(shù)據(jù)封裝為TCP/IP數(shù)據(jù)包傳送給目標(biāo)端的輸入進(jìn)程。在目標(biāo)端,輸入進(jìn)程在收到傳輸?shù)慕灰讛?shù)據(jù)包后,首先存入隊列,然后由裝載進(jìn)程從隊列中嚴(yán)格按照交易的順序裝載交易信息。負(fù)責(zé)傳輸?shù)倪M(jìn)程從本地隊列中按照先進(jìn)先出的原則抓取需要傳輸?shù)慕灰?,將交易?shù)據(jù)封裝成一個數(shù)據(jù)包后通過TCP/IP協(xié)議傳遞給對端系統(tǒng)。在封裝的數(shù)據(jù)包的包頭部分描述了包的大小。對應(yīng)端系統(tǒng)在接受到傳來的數(shù)據(jù)包后,首先根據(jù)包頭描述的包大小進(jìn)行傳輸?shù)暮戏ㄐ詸z查,判斷是否傳輸完整。
3.5 數(shù)據(jù)裝載
在傳統(tǒng)的復(fù)制技術(shù)中,常用的數(shù)據(jù)裝載方式是采用Oracle 的SQL接口,通過Insert、Update、Delete等SQL語句實現(xiàn)數(shù)據(jù)的裝載。這種方式在通用性上很好,但關(guān)鍵在于性能問題非常突出。SQL語句的執(zhí)行需要經(jīng)過parse、plan、格式轉(zhuǎn)換等過程,造成大量的系統(tǒng)開銷。尤其是Update和Delete操作的大量Where子句操作需要進(jìn)行復(fù)雜的查詢定位任務(wù),從而導(dǎo)致裝載性能低下,對處理能力的要求比生產(chǎn)系統(tǒng)的還高。DSG RealSync在裝載性能上進(jìn)行了大幅度的改善,使得裝載端的性能和處理能力需求降至最低。DSG RealSync采用了DXF數(shù)據(jù)格式的裝載和Rowid mapping的方式實現(xiàn)快速定位兩個關(guān)鍵技術(shù)提高了系統(tǒng)的裝載速度。
容災(zāi)不單單是備份那么簡單[6-7],而是指當(dāng)災(zāi)難發(fā)生時,系統(tǒng)可以在最短時間內(nèi)、最少的損失下恢復(fù)業(yè)務(wù)的運行[8-9]。我院通過DSG RealSync軟件構(gòu)建的容災(zāi)系統(tǒng)在災(zāi)難發(fā)生時無需進(jìn)行數(shù)據(jù)恢復(fù),保障了系統(tǒng)運行的可靠性、連續(xù)性。通過數(shù)據(jù)實時復(fù)制,保障了業(yè)務(wù)數(shù)據(jù)不丟失。而且主備硬件無需一致,減少了投入成本。在源系統(tǒng)發(fā)生災(zāi)難時,源端和目標(biāo)端停止復(fù)制進(jìn)程,在目標(biāo)端執(zhí)行切換腳本即可快速切換系統(tǒng)。當(dāng)源端修復(fù)完成可以正常使用時,只需在反向同步環(huán)境中發(fā)起一個全同步操作,然后完成整個反向回切過程即可切換到源系統(tǒng)。經(jīng)過實踐驗證,我院構(gòu)建的應(yīng)用容災(zāi)系統(tǒng)是切實可行的,并且在排除小型機(jī)故障和Oracle問題時發(fā)揮了極大的作用。
[1] 趙春曉.醫(yī)院信息系統(tǒng)中的數(shù)據(jù)安全[J].醫(yī)療裝備,2010,23(2): 31-32.
[2] 翁錦陽,何萍,朱鐵兵.大型醫(yī)院信息系統(tǒng)的容災(zāi)設(shè)計和應(yīng)用[J].中國醫(yī)療設(shè)備,2011,21(1):59-60.
[3] 翁盛鑫,黃影,莊嚴(yán).信息系統(tǒng)容災(zāi)技術(shù)的應(yīng)用設(shè)計與比較[J].醫(yī)療衛(wèi)生裝備,2010, 31(4):45-46.
[4] 馬錫坤,楊國斌,袁波.構(gòu)筑信息網(wǎng)絡(luò)基礎(chǔ)平臺 保障人財物科學(xué)管理[J].中國數(shù)字醫(yī)學(xué),2010,5(8):20-22.
[5] 汪瑤,顧慧,任凱,等.醫(yī)院數(shù)據(jù)容災(zāi)系統(tǒng)建設(shè)及相關(guān)探討[J].江蘇衛(wèi)生事業(yè)管理,2010,21(6):100-101.
[6] 羅緋,李明,張安仁,等.醫(yī)院信息系統(tǒng)備份策略[J].西南國防醫(yī)藥,2010,20(11):1254-1255.
[7] 王宏偉.關(guān)于醫(yī)院信息系統(tǒng)容災(zāi)與數(shù)據(jù)備份的思考[J].中國醫(yī)學(xué)教育技術(shù),2009,23(2):181-183.
[8] 陳嫻.淺談醫(yī)院容災(zāi)系統(tǒng)的設(shè)計[J].中國醫(yī)療前沿,2009,4(9): 125-126.
[9] 黃志中,王占明.醫(yī)院信息系統(tǒng)容災(zāi)技術(shù)淺談[J].醫(yī)療衛(wèi)生裝備,2009,30(6):48-50.
Construction of Application Disaster Tolerance System Based on Oracle Online
MA Xi-kun
Information Department, Nanjing General Hospital of Nanjing Military Command, Nanjing Jiangsu 210002, China
This paper introduces the characteristic and the principle of the DSG Real Sync software and the hole progress of application in disaster tolerance system online with it.
No 1 military project; online application disaster tolerance system; application disaster tolerance; data disaster tolerance
TP393.08
A
10.3969/j.issn.1674-1633.2012.02.010
1674-1633(2012)02-0038-03
2011-07-07
本文作者:馬錫坤,碩士研究生,高級工程師。
作者郵箱:maxikun@163.com