楊燕紅,劉長興,蔣閱峰
1. 濟(jì)南軍區(qū)總醫(yī)院 信息科,山東 濟(jì)南250031;2. 山東大學(xué) 控制科學(xué)與工程學(xué)院,山東 濟(jì)南 250014
數(shù)據(jù)保護(hù)技術(shù)在醫(yī)院信息系統(tǒng)數(shù)據(jù)庫中的應(yīng)用
楊燕紅1,劉長興1,蔣閱峰2
1. 濟(jì)南軍區(qū)總醫(yī)院 信息科,山東 濟(jì)南250031;2. 山東大學(xué) 控制科學(xué)與工程學(xué)院,山東 濟(jì)南 250014
甲骨文推出的Oracle數(shù)據(jù)庫高可用性數(shù)據(jù)保護(hù)(Data Guard)方案,它以低成本、高效能解決了數(shù)據(jù)庫的備份和容災(zāi)問題。本文詳細(xì)介紹了在我院醫(yī)院信息系統(tǒng)(HIS)數(shù)據(jù)庫中建立Data guard環(huán)境的方法和過程,并對Data guard環(huán)境測試和應(yīng)用中出現(xiàn)的故障及故障排除進(jìn)行了歸納總結(jié),值得同行參考與借鑒。
醫(yī)院信息系統(tǒng);Data Guard;數(shù)據(jù)庫備份;數(shù)據(jù)庫容災(zāi)
我院的醫(yī)院信息系統(tǒng)(HIS)采用 Oracle數(shù)據(jù)庫作為后臺數(shù)據(jù)庫管理系統(tǒng),滿足了HIS數(shù)據(jù)量大、數(shù)據(jù)類型復(fù)雜和并發(fā)事務(wù)多的要求[1]。隨著應(yīng)用功能的不斷擴(kuò)大,其業(yè)務(wù)范圍覆蓋了醫(yī)院的各項醫(yī)療活動,數(shù)據(jù)量也迅猛增長,一旦數(shù)據(jù)庫發(fā)生故障和災(zāi)難會直接影響醫(yī)院業(yè)務(wù)活動的正常運行,甚至給醫(yī)院造成巨大損失。甲骨文推出的Oracle數(shù)據(jù)庫高可用性數(shù)據(jù)保護(hù)(Data Guard)方案,是一種有效的數(shù)據(jù)容災(zāi)解決方案[2]。因此,我們在數(shù)據(jù)庫熱備份的基礎(chǔ)上又采用了Data Guard建立備份架構(gòu),防止數(shù)據(jù)丟失,實現(xiàn)快速災(zāi)難恢復(fù),進(jìn)一步保障數(shù)據(jù)安全。本文詳細(xì)介紹了Data Guard在我院HIS數(shù)據(jù)庫的實施過程與應(yīng)用體會。
Data Guard環(huán)境由一個主數(shù)據(jù)庫(Primary)及一個或多個備用數(shù)據(jù)庫(Standby)組成,可由Oracle 數(shù)據(jù)庫內(nèi)部網(wǎng)絡(luò)架構(gòu)連接分布于不同地域。主備庫之間通過重做傳輸服務(wù)和日志應(yīng)用服務(wù)可以實時恢復(fù)數(shù)據(jù)以保證數(shù)據(jù)的同步[3]。我們在兩臺服務(wù)器上搭建Data Guard 環(huán)境,操作系統(tǒng)為Microsoft Windows Server 2008、Enterprise x64 Edition SP2;數(shù)據(jù)庫版本為Oracle Database 10g、Enterprise Edition Release 10.2.0.4.0 - 64bit Production。主、備數(shù)據(jù)庫安裝時設(shè)置為歸檔模式,并且邏輯結(jié)構(gòu)一致[4-6]。安裝步驟如下:
1.1 主庫端設(shè)置
(1)設(shè)置主數(shù)據(jù)庫為強(qiáng)制日志模式,強(qiáng)制數(shù)據(jù)庫在任何狀態(tài)下必須記錄日志。主庫創(chuàng)建是為主、備數(shù)據(jù)庫切換使用的。
(2)創(chuàng)建備庫,添加備用聯(lián)機(jī)日志文件,文件大小與主庫聯(lián)機(jī)日志文件大小相同,日志文件組數(shù)至少比主庫多1個。
(3)修改監(jiān)聽和連接配置文件,增加指定全局?jǐn)?shù)據(jù)庫名,主、備庫別名及連接地址等。
(4)創(chuàng)建備庫的控制文件和密碼文件。
(5)創(chuàng)建、修改初始化參數(shù)文件,配置Data Guard環(huán)境所需的數(shù)據(jù)庫別名,設(shè)置主、備庫歸檔參數(shù)及狀態(tài)等。
(6)關(guān)閉數(shù)據(jù)庫,使用參數(shù)文件重啟主庫并創(chuàng)建二進(jìn)制參數(shù)文件。
1.2 備庫端操作
(1)修改備庫監(jiān)聽和連接配置文件方法同主庫。
(2)拷貝文件并配置備庫初始化參數(shù)。
(3)關(guān)閉主備庫,拷貝數(shù)據(jù)文件、參數(shù)文件、密碼文件、聯(lián)機(jī)日志文件及創(chuàng)建的備庫控制文件到相應(yīng)的文件夾下,修改初始化參數(shù)文件,將文件中的主庫與備庫位置互換。復(fù)制備庫控制文件并分別重命名為control01.ctl,control02. ctl,control03.ctl。
(4)使用參數(shù)文件啟動備庫,創(chuàng)建二進(jìn)制參數(shù)文件。
1.3 測試
(1)主、備庫分別重啟監(jiān)聽服務(wù),并執(zhí)行連接測試命令,查看主備之間是否連通。
(2)備庫裝入數(shù)據(jù)時查看是否存在恢復(fù)進(jìn)程MRP0,如果沒有,執(zhí)行啟動語句重做。
(3)主庫正常啟動后,驗證歸檔目錄是否有效并強(qiáng)制歸檔。
此時分別查看主、備歸檔日志的最大序列號,如果主備查詢結(jié)果一致,并且主庫和備庫的歸檔目錄下產(chǎn)生了相同的歸檔日志文件,則Data Guard環(huán)境建立完成。
修改數(shù)據(jù)庫保護(hù)模式,實現(xiàn)主、備庫數(shù)據(jù)同步[7-8]。Data guard有3種數(shù)據(jù)保護(hù)模式,分別為最大保護(hù)、最高可用性和最高性能保護(hù)模式。最大保護(hù)模式下主備庫之間數(shù)據(jù)完全同步,但是如果網(wǎng)絡(luò)或備庫出現(xiàn)問題會直接影響主庫操作,導(dǎo)致主庫宕機(jī);最高可用性模式下主備庫之間數(shù)據(jù)同步,當(dāng)網(wǎng)絡(luò)或者備庫出現(xiàn)問題時,不會導(dǎo)致主庫宕機(jī),待備庫可用時,將歸檔傳輸?shù)絺鋷熳龌謴?fù);最高性能模式下主備庫之間數(shù)據(jù)是異步傳輸?shù)?,主?shù)據(jù)庫具有更高的性能,但有可能會丟失少量數(shù)據(jù)。
為保證數(shù)據(jù)實時同步,主服務(wù)器發(fā)生故障時不丟失數(shù)據(jù),綜合考慮后我們選擇了最高可用性模式并在備庫啟動實時應(yīng)用。具體操作過程如下:
(1)修改主庫日志傳送方式為日志寫進(jìn)程(Log Writer,lgwr)同步方式[9]:SQL>alter system set log_archive_ dest_2='SERVICE=standby lgwr SYNC AFFIRM VALID_ FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_ NAME=standby'。
(2)修改主庫保護(hù)模式為最高可用性:SQL>alter database set standby database to maximize availability。
(3)執(zhí)行后查看保護(hù)模式和保護(hù)級別:SQL>select protection_mode,protection_level from v$database。如果保護(hù)模式和保護(hù)級別均為最高可用性,則修改成功。主庫的保護(hù)模式修改之后,備庫的模式也會改變,和主庫保持一致。
(4)備庫執(zhí)行語句啟動實時應(yīng)用:SQL>alter database recover managed standby database using current logfile disconnect from session。
Data Guard搭建完成后,由于所要求環(huán)境的嚴(yán)格性,易出現(xiàn)異常情況,因此需要經(jīng)常查看狀態(tài)是否正常,筆者歸納整理了使用過程中出現(xiàn)的幾次故障與應(yīng)用情況。
3.1 常用查看語句
查看備庫進(jìn)程是否正常,包含歸檔進(jìn)程(ARCH)、恢復(fù)進(jìn)程(MRP0)及遠(yuǎn)程文件服務(wù)(RFS):SQL>select process,status,sequence# from v$managed_standby;
查看主庫數(shù)據(jù)保護(hù)模式和級別:SQL>select protection_ mode,protection_level from v$database;
查看備庫恢復(fù)模式是否為實時應(yīng)用(MANAGED REAL TIME APPLY),保證在最高可用性模式下實時同步數(shù)據(jù):SQL>select recovery_mode from v$archive_dest_status where dest_id=2。3.2 故障現(xiàn)象與排除
3.2.1 備庫未接收到主庫日志信息
備庫顯示RFS進(jìn)程序列號為0,主庫查詢歸檔目錄狀態(tài)時,備庫端目錄顯示錯誤ORA-12571:TNS包寫入程序失敗。
TNS(Transparence Network Substrate)意為透明網(wǎng)絡(luò)底層,專門用來管理和配置Oracle數(shù)據(jù)庫和客戶端連接[10]。因此,首先懷疑是網(wǎng)絡(luò)故障。此時,在主服務(wù)器上ping備庫IP地址提示響應(yīng)超時,但與其他機(jī)器連接正常。檢查備庫網(wǎng)絡(luò)連接,在備庫端ping主庫和其他地址均能正常響應(yīng);再檢查防火墻,在備庫端打開“Windows防火墻”設(shè)置,發(fā)現(xiàn)防火墻被人啟用了。立刻關(guān)閉防火墻,此時主庫ping備庫正常,稍后備庫狀態(tài)恢復(fù)為有效,從斷點處能正常接收主庫傳來的日志信息并即時成功應(yīng)用。
3.2.2 歸檔日志文件沒有生成
備庫沒有RFS進(jìn)程,在主庫查詢歸檔目錄,備庫端目錄顯示錯誤ORA-01031:Insufficient privileges,提示權(quán)限不足。
備庫的RFS進(jìn)程主要用來接受從主庫傳送過來的日志信息,可以直接將日志寫進(jìn)備庫重做日志或歸檔日志中。此時,主、備數(shù)據(jù)庫網(wǎng)絡(luò)連接正常,能互聯(lián)互通。此問題出現(xiàn)是由于主庫因網(wǎng)絡(luò)連接服務(wù)異常而執(zhí)行了重新啟動,分析后聯(lián)想到Oracle數(shù)據(jù)庫連接問題。在Oracle數(shù)據(jù)庫中連接的認(rèn)證方式有兩種:分別是操作系統(tǒng)認(rèn)證和密碼認(rèn)證,遠(yuǎn)程連接必須使用密碼認(rèn)證[11]。主庫sys口令最近被修改過,而Data guard搭建時要求主備庫口令必須一致。由此推斷,主庫重啟后再遠(yuǎn)程連接備庫時因密碼改變而導(dǎo)致認(rèn)證失敗,權(quán)限不足。緊接著將主庫sys口令改回原來的口令,一切恢復(fù)正常。3.2.3 熱備份數(shù)據(jù)不能恢復(fù)
在恢復(fù)熱備份數(shù)據(jù)過程中啟動實例和恢復(fù)數(shù)據(jù)正常,但在打開數(shù)據(jù)庫將其變?yōu)榭捎脮r報錯:
ORA-00449:background process 'DBW 0' unexpectedly terminated with error 16072
ORA-16072:a m inimum of one standby database destination is required
提示至少需要1個備庫。分析原因是設(shè)置了保護(hù)模式為最大可用性,所以至少需要1個備庫支持。此時,在備用服務(wù)器執(zhí)行恢復(fù)命令后,要先將保護(hù)模式修改為最大性能,就可以將數(shù)據(jù)庫打開變?yōu)榭捎谩?/p>
3.2.4 主服務(wù)器反復(fù)重啟
故障切換是主數(shù)據(jù)庫出現(xiàn)計劃外的災(zāi)難性故障且不可能及時恢復(fù)時,將備用數(shù)據(jù)庫用作新的主數(shù)據(jù)庫的操作,可以快速實現(xiàn)災(zāi)難恢復(fù)[12-13]。如我院曾出現(xiàn)過主服務(wù)器因raid卡控制器故障而不斷重啟導(dǎo)致不能使用,此時主庫癱瘓,立刻啟用備庫,操作如下:
(1)停止應(yīng)用歸檔:SQL>alter database recover managed standby database finish force;
(2)將STANDBY數(shù)據(jù)庫切換為PRIMARY數(shù)據(jù)庫:SQL>alter database commit to switchover to primary;
(3)正常關(guān)閉、啟動數(shù)據(jù)庫并修改IP地址,替代主庫。
4.1 注意事項
在Data Guard建立與使用過程中下面幾點需要注意:①主備庫Oracle數(shù)據(jù)庫版本必須一致、邏輯結(jié)構(gòu)相同,以免出現(xiàn)數(shù)據(jù)庫錯誤;②搭建過程中仔細(xì)謹(jǐn)慎按照步驟操作,保障環(huán)境搭建成功;③建議對主數(shù)據(jù)庫的可用性和性能與丟失少量數(shù)據(jù)的風(fēng)險進(jìn)行比較衡量,在最高可用性和最高性能兩者中選擇保護(hù)模式;④最高可用性必須保證備庫有備用聯(lián)機(jī)日志文件,并且主庫的日志傳送方式為同步方式;⑤不要對主、備庫的口令和狀態(tài)隨意修改,要經(jīng)常查看主、備庫的Data Guard環(huán)境是否正常。
4.2 應(yīng)用效果
以前我們一直采用熱備份方式備份數(shù)據(jù),主機(jī)一旦宕機(jī),在備用機(jī)應(yīng)用歸檔日志文件恢復(fù)至少需要0.5 h,并且會損失部分?jǐn)?shù)據(jù)。應(yīng)用Oracle Data Guard可以在幾分鐘內(nèi)完成數(shù)據(jù)庫切換,恢復(fù)正常使用,而且不會丟失數(shù)據(jù)。相比之下優(yōu)點明顯[14]:
(1)災(zāi)難恢復(fù)和高可用性。Data Guard 提供了高效全面的災(zāi)難恢復(fù),易于管理的轉(zhuǎn)換和故障切換功能允許主備數(shù)據(jù)庫之間角色轉(zhuǎn)換,從而使主數(shù)據(jù)庫中斷所導(dǎo)致的停機(jī)時間減到最少。
(2)完全的數(shù)據(jù)保護(hù)。通過自動檢測和解決中斷、防止數(shù)據(jù)損壞和用戶錯誤的安全保護(hù),保證備庫數(shù)據(jù)零丟失,與主庫同步。
(3)有效利用系統(tǒng)資源。備用數(shù)據(jù)庫可用于備份操作、報表、統(tǒng)計和查詢等其他任務(wù),從而減少主數(shù)據(jù)庫工作負(fù)載。
(4)數(shù)據(jù)保護(hù)方式靈活。Data Guard 提供了最大保護(hù)、最高可用性和最高性能等模式,可以幫助企業(yè)在系統(tǒng)性能要求和數(shù)據(jù)保護(hù)之間取得平衡。
(5)低成本的備份方案。Data Guard具有Oracle數(shù)據(jù)庫完全集成的功能,不需要單獨安裝,無需任何額外費用。
總之,Data Guard具有優(yōu)越的性能,使用后能夠迅速、高效地處理難以預(yù)見的業(yè)務(wù)中斷,保護(hù)數(shù)據(jù)不受故障、災(zāi)難、錯誤和崩潰的影響,值得推廣和使用。
[1]彭紅波,韓晟,蔡宏偉,等.DataGuard在“軍字一號”系統(tǒng)中的應(yīng)用[J].中國醫(yī)療設(shè)備,2012,27(3):43-45.
[2]楊劍,王瑜.O racle Data Guard容災(zāi)技術(shù)的研究與實現(xiàn)[J].現(xiàn)代計算機(jī),2012,(13):10-14.
[3]林樹澤,李淵.O racle 數(shù)據(jù)庫進(jìn)階-高可用性、性能優(yōu)化和備份恢復(fù)[M].1版.北京:清華大學(xué)出版社,2011:140-143.
[4]Larry Carpenter,等.O racle Data Guard 11g 完全參考手冊[M].劉玉達(dá),危建輝,張敏.譯.1版.北京:清華大學(xué)出版社,2011:27-58.
[5]李丙洋.涂抹O racle:-三思筆記之一步一步學(xué)O racle[M].1版.北京:中國水利水電出版社,2010:200-246.
[6]劉冬梅,秦方鈺,馬建萍.Oracle數(shù)據(jù)庫遠(yuǎn)程備份的設(shè)計及實現(xiàn)[J].信息安全與技術(shù),2012,(12):84-86.
[7]張帆,李響,張紅君.軍衛(wèi)一號O racle8i到O racle11g在異構(gòu)環(huán)境下的升級過程[J].醫(yī)學(xué)信息學(xué)雜志,2014,(1):26-28,32.
[8]趙志慧.數(shù)據(jù)容災(zāi)備份的方法與實現(xiàn)[J].計算機(jī)光盤軟件與應(yīng)用,2012,(8):36.
[9]李民.基于O racleDataGuard構(gòu)建醫(yī)院信息系統(tǒng)的容災(zāi)備份方案[J].醫(yī)療衛(wèi)生裝備,2012,33(8):45-47.
[10]Bryla B,Loney K.O racle Database 11g DBA 手冊[M].劉偉琴.譯.1版.北京:清華大學(xué)出版社,2009.
[11]臧建蓮,張宇敬.O racle 數(shù)據(jù)庫安全技術(shù)與策略[J].電子技術(shù)與軟件工程,2014,(2):203.
[12]潘傳迪.基于Data Guard和RMAN的Oracle數(shù)據(jù)庫容災(zāi)方案[J].醫(yī)院管理論壇,2014,31(1):51-54.
[13]江英琴.基于日志復(fù)制的醫(yī)院容災(zāi)備份系統(tǒng)的構(gòu)建與應(yīng)用[D].杭州:浙江工業(yè)大學(xué),2014.
[14]王靖,劉麗杰.O racle Data Guard容災(zāi)監(jiān)控方案探討[J].信息通信,2012,(6):201-203.
App lication of Oracle Data Guard in the Hospital Information System Database
YANG Yan-hong1, LIU Chang-xing1, JIANG Yue-feng2
1.Department of Information, Jinan M ilitary General Hospital, Jinan Shandong 250031, China;2.College of Control Science and Engineering, Shandong University, Jinan Shandong 250014, China
Oracle Data Guard is a high-availability protection technology of database. Backup and disaster tolerance can be realized by using Data Guard w ith low cost and high performance. This paper introduced the steps of building Oracle Data Guard environment in the hospital information system database, and summarized several usages under the environment, which provided references and deserved w ider application.
hospital information system;Data Guard;database backup;database disaster tolerance
TP319
A
10.3969/j.issn.1674-1633.2015.09.029
1674-1633(2015)09-0096-03
2015-03-14
2015-05-13
蔣閱峰,副教授。
通訊作者郵箱:jyfyyh@163.com