紀(jì)亞亮,鄭 陽(yáng)
醫(yī)院信息系統(tǒng)全天候支撐著醫(yī)院紛繁復(fù)雜的業(yè)務(wù),數(shù)據(jù)庫(kù)作為信息系統(tǒng)的核心部件,使得醫(yī)院對(duì)其依賴程度日益增強(qiáng)。因此,數(shù)據(jù)的可用性和可靠性顯得尤為重要,一旦硬件故障或自然不可抗拒因素造成數(shù)據(jù)庫(kù)損壞,使數(shù)據(jù)丟失或不可用時(shí),就會(huì)給醫(yī)院帶來無法估量的損失,同時(shí)還會(huì)使醫(yī)院陷入管理混亂的境地。如何保障在災(zāi)難發(fā)生時(shí)醫(yī)院數(shù)據(jù)不丟失,保證系統(tǒng)服務(wù)盡快恢復(fù)運(yùn)行,成為人們關(guān)注的話題[1]。所以,建立一套安全可靠的異地?cái)?shù)據(jù)保護(hù)系統(tǒng)是大勢(shì)所趨,也是醫(yī)院突顯核心競(jìng)爭(zhēng)力的必經(jīng)之路。Data Guard是在邏輯層,通過傳輸和運(yùn)行數(shù)據(jù)庫(kù)日志文件來保持生產(chǎn)和備份數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性[2]。其物理備用數(shù)據(jù)庫(kù)作為我院異地容災(zāi)數(shù)據(jù)庫(kù)的首選方案,經(jīng)過測(cè)試和驗(yàn)證,能夠滿足醫(yī)院業(yè)務(wù)數(shù)據(jù)庫(kù)可用性和可靠性的雙重要求,為醫(yī)院信息系統(tǒng)的穩(wěn)定運(yùn)行提供保障。
Data Guard作為Oracle企業(yè)版的一個(gè)組件,提供一整套功能,包括創(chuàng)建、維護(hù)、管理和監(jiān)控一個(gè)或多個(gè)Standby數(shù)據(jù)庫(kù),使主數(shù)據(jù)庫(kù)即使發(fā)生災(zāi)難和數(shù)據(jù)破壞也能保證數(shù)據(jù)不丟失[3]。Data Guard主要由Redo日志傳輸服務(wù)和Redo日志應(yīng)用服務(wù)構(gòu)成。日志的傳輸是由主數(shù)據(jù)庫(kù)的LOG_ARCHIVE_DEST_N參數(shù)配置,有實(shí)時(shí)傳輸和切換時(shí)傳輸之分,其和DataGuard的保護(hù)模式有關(guān)。日志的應(yīng)用分為實(shí)時(shí)應(yīng)用和延時(shí)應(yīng)用。一旦主數(shù)據(jù)庫(kù)因計(jì)劃或意外事件宕機(jī),Data Guard能切換Standby數(shù)據(jù)庫(kù)到主數(shù)據(jù)庫(kù)的角色,最大程度縮短停機(jī)時(shí)間。Oracle Database 11g Release2支持在給定的O-racle Data Guard配置類型中使用多達(dá)30個(gè)任意類型的備用數(shù)據(jù)庫(kù),以滿足幾乎任意類型應(yīng)用程序的高可用性和可擴(kuò)展性需要[4]。
1.2.1 物理備用數(shù)據(jù)庫(kù)
物理備用數(shù)據(jù)庫(kù)通過介質(zhì)恢復(fù)來實(shí)現(xiàn)數(shù)據(jù)庫(kù)重做,以達(dá)到與數(shù)據(jù)庫(kù)保持一致的目的。如圖1所示,這種恢復(fù)是Oracle自身的分塊復(fù)制技術(shù)。該模式下備庫(kù)允許以只讀方式打開數(shù)據(jù)庫(kù),從而可以進(jìn)行相關(guān)報(bào)表的查詢工作,不同程度上減輕了主數(shù)據(jù)庫(kù)的只讀負(fù)載。在10g以前,只讀打開備庫(kù)后,Redo日志不可以接受和應(yīng)用,而在11g以后則無此限制。因此,物理備用數(shù)據(jù)庫(kù)在保護(hù)數(shù)據(jù)的同時(shí)可以生成最新報(bào)表。
圖1 典型的Data guard配置
1.2.2 邏輯備用數(shù)據(jù)庫(kù)
邏輯備用數(shù)據(jù)庫(kù)通過Redo日志轉(zhuǎn)換成SQL語(yǔ)句,并在備庫(kù)上執(zhí)行該SQL語(yǔ)句。由于是執(zhí)行SQL語(yǔ)句而非介質(zhì)恢復(fù),只包含了相同的邏輯信息,因此,物理結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)可以不同。多數(shù)情況下,邏輯備用數(shù)據(jù)庫(kù)用來升級(jí)數(shù)據(jù)庫(kù)。
1.2.3 快照備用數(shù)據(jù)庫(kù)
快照備用數(shù)據(jù)庫(kù)可以以讀/寫的方式打開備用數(shù)據(jù)庫(kù),其利用了數(shù)據(jù)庫(kù)的閃回技術(shù)作為輔助,與物理備用數(shù)據(jù)庫(kù)一樣,從主數(shù)據(jù)庫(kù)接受Redo數(shù)據(jù),但暫時(shí)不應(yīng)用Redo日志,直到快照備用數(shù)據(jù)庫(kù)轉(zhuǎn)換為物理備用數(shù)據(jù)庫(kù)后才應(yīng)用Redo日志。快照備用數(shù)據(jù)庫(kù)一般用于現(xiàn)場(chǎng)測(cè)試。
Oracle提供了3種Data Guard保護(hù)模式來滿足各種不同安全級(jí)別要求的系統(tǒng),包括了最大保護(hù)、最大性能保護(hù)、最高可用性保護(hù),見表1。
表1 3種保護(hù)模式
我院生產(chǎn)庫(kù)為2臺(tái)HPDL585構(gòu)建的基于Windows Server2003的64位集群,安裝Oracle 11g R2 64位數(shù)據(jù)庫(kù),位于我院中心大樓機(jī)房。異地服務(wù)器為一臺(tái)HPDL380,基于Windows Server2003 64位操作系統(tǒng),安裝Oracle11gR2 64位數(shù)據(jù)庫(kù),位于我院小紅樓病區(qū)弱電機(jī)房。生產(chǎn)庫(kù)存儲(chǔ)采用2臺(tái)EMCVNX5500,一主一備;生產(chǎn)庫(kù)儲(chǔ)存網(wǎng)絡(luò)由2臺(tái)光纖交換機(jī)構(gòu)成冗余SAN網(wǎng)絡(luò)。異地存儲(chǔ)采用醫(yī)院現(xiàn)有的建聯(lián)Raidsys9300 FM,異地容災(zāi)架構(gòu)圖如圖2所示。比較DataGuard備庫(kù)的3種保護(hù)模式,我院采用最大性能模式配置異地容災(zāi)數(shù)據(jù)庫(kù)。日志采用異步傳輸?shù)哪J剑s小 RPO(recovery point object),減少 RTO(recovery time object)[5]。
連接主庫(kù),確認(rèn)已處于歸檔和force logging模式,創(chuàng)建pfile。停止主庫(kù),復(fù)制一個(gè)密碼文件副本,修改pfile,添加如下內(nèi)容:
圖2 異地容災(zāi)架構(gòu)圖
連接異地備用服務(wù)器,創(chuàng)建和主庫(kù)相同的目錄結(jié)構(gòu),磁盤的盤符最好和主庫(kù)保持一致。接著創(chuàng)建實(shí)例,oradim-new-sid orcl,配置環(huán)境變量,并連接到該空閑實(shí)例??截愔鲙?kù)的密碼文件副本到相應(yīng)目錄,創(chuàng)建一個(gè)內(nèi)容僅包含DB_NAME的pfile文件,利用該pfile啟動(dòng)備庫(kù)到nomount狀態(tài)。在備庫(kù)上添加備用重做日志文件,需要注意的是,這里主庫(kù)有3個(gè)ORL組,每個(gè)50MB,所以,我們?cè)趥鋷?kù)上創(chuàng)建4個(gè)大小為50MB的SRL組,額外的重做日志作為一個(gè)緩沖區(qū),提高處理大量事務(wù)的能力。
在主庫(kù)和備庫(kù)配置雙方的TNS解析和靜態(tài)監(jiān)聽器,配置完監(jiān)聽后需要重啟或重加載監(jiān)聽器。
10g版本以前是通過冷備份將主庫(kù)拷貝到備庫(kù)[6],或者通過RMAN先行在主庫(kù)上備份數(shù)據(jù)庫(kù),然后拷貝到備庫(kù),再行導(dǎo)入備用數(shù)據(jù)庫(kù)[7],操作比較繁瑣,而且需要占用比較大的臨時(shí)存儲(chǔ)空間。11g版本以后,可以利用RMAN直接復(fù)制數(shù)據(jù)庫(kù),我院采用復(fù)制數(shù)據(jù)庫(kù)的方式進(jìn)行。代碼如下:
連接備庫(kù),創(chuàng)建pfile,在pfile中添加參數(shù)信息,參照主庫(kù)新加參數(shù)。停止備庫(kù),利用修改過的pfile啟動(dòng)備庫(kù)到mount狀態(tài),創(chuàng)建spfile。
在備用數(shù)據(jù)庫(kù)上啟動(dòng)應(yīng)用進(jìn)程的代碼如下:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Data Guard實(shí)現(xiàn)了主備庫(kù)之間角色的輕松轉(zhuǎn)換,最小化主庫(kù)的停機(jī)時(shí)間,可以使終端用戶在幾分鐘而不是幾天或幾周內(nèi)訪問數(shù)據(jù)庫(kù),具備了高可用性(與rac結(jié)合達(dá)到了最高可用體系結(jié)構(gòu));備庫(kù)的3種數(shù)據(jù)保護(hù)模式確保不會(huì)有(或者只有很少的)數(shù)據(jù)丟失,保證了生產(chǎn)數(shù)據(jù)庫(kù)數(shù)據(jù)不會(huì)因硬件故障或自然災(zāi)害而丟失,具備了數(shù)據(jù)持續(xù)保護(hù)的能力,可靠性得到驗(yàn)證。
物理備用數(shù)據(jù)庫(kù)是基于介質(zhì)的恢復(fù),重做數(shù)據(jù)是從主數(shù)據(jù)庫(kù)接受,在備庫(kù)應(yīng)用。Oracle 11g中的新參數(shù)DB_LOST_WRITE_PROTECT提供獨(dú)特的技術(shù)防止寫丟失造成的損失,主庫(kù)存儲(chǔ)級(jí)別的物理?yè)p壞不會(huì)蔓延到備庫(kù)。同時(shí),邏輯損壞或者用戶錯(cuò)誤引起的主數(shù)據(jù)庫(kù)破壞也能得到一定程度的保護(hù)。它不需要硬件鏡像做法的大投資,提供了遠(yuǎn)程磁盤鏡像技術(shù)所無法實(shí)現(xiàn)的功能,特別是在遠(yuǎn)程數(shù)據(jù)庫(kù)備份過程中,DataGuard的優(yōu)勢(shì)更加明顯。
物理備用數(shù)據(jù)庫(kù)以只讀方式打開后可以進(jìn)行報(bào)表生成和查詢等工作,如果配合快照備用數(shù)據(jù)庫(kù),還可以進(jìn)行程序開發(fā)測(cè)試等工作,由此減少了數(shù)據(jù)庫(kù)的工作量,節(jié)約了主數(shù)據(jù)庫(kù)的CPU和I/O等寶貴資源。
醫(yī)院信息中心數(shù)據(jù)庫(kù)連續(xù)性服務(wù)一直是醫(yī)療信息界探討的熱點(diǎn),異地容災(zāi)項(xiàng)目的搭建除了防災(zāi)減災(zāi)外,還是不間斷提供服務(wù)的一個(gè)保障。DataGuard作為Oracle數(shù)據(jù)庫(kù)本身的一組部件,實(shí)現(xiàn)了異地的應(yīng)用級(jí)容災(zāi),很好地滿足了數(shù)據(jù)庫(kù)異地容災(zāi)的需求。隨著IT的發(fā)展,市場(chǎng)上涌現(xiàn)了眾多優(yōu)秀的異地容災(zāi)產(chǎn)品,如 EMC-VPLEX、symantec BT、IBM Tivoli Storage Manager、Oracle GoldenGate等。作為醫(yī)院方,結(jié)合各產(chǎn)品的特點(diǎn)和醫(yī)院自身的實(shí)際情況(經(jīng)濟(jì)實(shí)力、人員配備、技術(shù)等),選擇恰當(dāng)?shù)娜轂?zāi)產(chǎn)品可以事半功倍。我院作為南京一家市屬醫(yī)院,正由??葡蚓C合轉(zhuǎn)型,經(jīng)濟(jì)實(shí)力比較薄弱,選擇Oracle Data Guard既滿足了醫(yī)院數(shù)據(jù)高可用和可靠的雙重需求,又為醫(yī)院節(jié)約了成本,最終提升了醫(yī)院的信息化服務(wù)水平。
[1] 黃志中,王占明.醫(yī)院信息系統(tǒng)容災(zāi)技術(shù)淺談[J].醫(yī)療衛(wèi)生裝備,2009,30(6):48-50.
[2] 杜戰(zhàn)偉,黃志中,鄭萬松.Oracle RAC環(huán)境下建立DATAGUARD的研究[J].醫(yī)療衛(wèi)生裝備,2010,31(10):71-73.
[3] 劉炳林.構(gòu)建最高可用Oracle數(shù)據(jù)庫(kù)系統(tǒng)[M].北京:機(jī)械工業(yè)出社,2012:395-401.
[4] Jesse S,Vongray B,Burton B.Oracle Database11gR2 高可用性:使用Grid Infrastructure、RAC和DataGuard最大限度提高可用性[M].張慧穎,李波,譯.2版.北京:清華大學(xué)出版社,2012:228-231.
[5] 曹文琴,朱海燕,劉映球.基于Oracle數(shù)據(jù)庫(kù)容災(zāi)技術(shù)的研究[J].制造業(yè)自動(dòng)化,2012,34(11):63-64.
[6] 彭紅波,韓晟,蔡宏偉,等.DataGuard在“軍字一號(hào)”系統(tǒng)中的應(yīng)用[J].中國(guó)醫(yī)療設(shè)備,2012,27(3):43-45.
[7] 徐正雄,王玲,可向民,等.利用RMAN創(chuàng)建“軍衛(wèi)一號(hào)”O(jiān)racl Dataguard 數(shù)據(jù)庫(kù)[J].醫(yī)療衛(wèi)生裝備,2010,31(6):45-47.