王興強(qiáng),孟 娜
[作者單位]250031山東濟(jì)南,原濟(jì)南軍區(qū)總醫(yī)院信息科(王興強(qiáng),孟娜)
[關(guān)鍵字] 軍衛(wèi)一號;數(shù)據(jù)庫;恢復(fù)
筆者所在醫(yī)院“軍衛(wèi)一號”信息系統(tǒng)運行十余年,his數(shù)據(jù)庫經(jīng)歷了由 oracle 8i升級至 oracle 10g,由32位升級至64位,數(shù)據(jù)庫服務(wù)器也不斷更新?lián)Q代,從而保障了業(yè)務(wù)系統(tǒng)的正常運行,但數(shù)據(jù)庫的安全性及穩(wěn)定性仍然是醫(yī)院信息部門維護(hù)的重中之重,硬件故障、軟件故障、網(wǎng)絡(luò)故障、進(jìn)程故障和系統(tǒng)故障都會造成數(shù)據(jù)庫的宕機(jī),導(dǎo)致數(shù)據(jù)的丟失,給醫(yī)院的業(yè)務(wù)造成非常嚴(yán)重的后果。醫(yī)院信息部門需要根據(jù)數(shù)據(jù)庫不同的異常情況,采取相應(yīng)的恢復(fù)方法[1-6],對數(shù)據(jù)庫進(jìn)行有針對性的恢復(fù)。
該文提出了“軍衛(wèi)一號”數(shù)據(jù)庫不同類型數(shù)據(jù)庫文件損壞的恢復(fù)方法,可以規(guī)避數(shù)據(jù)庫宕機(jī)而數(shù)據(jù)無法恢復(fù)的嚴(yán)重后果,保障了“軍衛(wèi)一號”數(shù)據(jù)庫的安全穩(wěn)定運行。
當(dāng)數(shù)據(jù)庫正常運行時,由于計算機(jī)系統(tǒng)的某些故障(如內(nèi)存錯誤、硬盤壞道、系統(tǒng)崩潰、意外掉電等)會影響數(shù)據(jù)庫系統(tǒng)的操作,影響數(shù)據(jù)庫中數(shù)據(jù)的正確性、可靠性、數(shù)據(jù)一致性,有時甚至破壞數(shù)據(jù)庫,使數(shù)據(jù)庫中全部或部分?jǐn)?shù)據(jù)丟失。因此當(dāng)發(fā)生上述故障后重構(gòu)這個完整的數(shù)據(jù)庫,即為數(shù)據(jù)庫恢復(fù)。數(shù)據(jù)庫文件損壞所需要的恢復(fù)為數(shù)據(jù)庫文件介質(zhì)的恢復(fù) (“軍衛(wèi)一號”his數(shù)據(jù)庫對數(shù)據(jù)的安全性有著嚴(yán)格的要求,該文介紹的數(shù)據(jù)庫恢復(fù)方法均在數(shù)據(jù)庫歸檔模式下,且進(jìn)行完全數(shù)據(jù)恢復(fù),同時可減少宕機(jī)時間)。
“軍衛(wèi)一號”his數(shù)據(jù)庫包括數(shù)據(jù)文件、聯(lián)機(jī)日志文件、控制文件、回滾數(shù)據(jù)文件、臨時數(shù)據(jù)文件等多種文件類型。
2.1 數(shù)據(jù)文件損壞的恢復(fù)方法 損壞或丟失單個數(shù)據(jù)文件,利用備份數(shù)據(jù)庫和歸檔日志進(jìn)行恢復(fù),可以減少宕機(jī)時間,并進(jìn)行數(shù)據(jù)庫的完全恢復(fù),從備份后到數(shù)據(jù)庫崩潰時的數(shù)據(jù)都不會丟失。(1)啟動數(shù)據(jù)庫錯誤,脫機(jī)該數(shù)據(jù)文件。操作如下:startup;啟動數(shù)據(jù)庫報 ora-01157、ora-01110錯誤;alter database datafile n offline drop;脫機(jī)數(shù)據(jù)文件,n為文件序號。(2)打開數(shù)據(jù)庫,拷貝備份數(shù)據(jù)文件,恢復(fù)該數(shù)據(jù)文件,并聯(lián)機(jī)。操作如下:alter database open; 打開數(shù)據(jù)庫;copy d:databakapcomm.dbf d:oracleoradataorcl;拷貝備份文件從備份處;recover datafile n;恢復(fù)該數(shù)據(jù)文件;alter database datafile n online;恢復(fù)成功,聯(lián)機(jī)該數(shù)據(jù)文件。
需要注意的是,在恢復(fù)過程中,如果有多個數(shù)據(jù)文件損壞,可以采用一個一個數(shù)據(jù)文件的恢復(fù)方法(需要對數(shù)據(jù)文件一一脫機(jī),再對數(shù)據(jù)文件分別恢復(fù)),也可以采用整個數(shù)據(jù)庫的恢復(fù)方法;但如果是系統(tǒng)表空間文件損壞,不能采用此方法。
2.2 聯(lián)機(jī)日志文件損壞的恢復(fù)方法 聯(lián)機(jī)日志文件分為當(dāng)前聯(lián)機(jī)日志文件和非當(dāng)前聯(lián)機(jī)日志文件,兩種聯(lián)機(jī)日志文件的損壞恢復(fù)方法不同,非當(dāng)前聯(lián)機(jī)日志文件損壞可通過clear命令解決問題,當(dāng)前聯(lián)機(jī)日志文件損壞需要recover命令進(jìn)行不完全數(shù)據(jù)恢復(fù)。
非當(dāng)前聯(lián)機(jī)日志文件恢復(fù):(1)啟動數(shù)據(jù)庫。startup;啟動數(shù)據(jù)庫報ora-00312或ora-00313錯誤,提示日志組n的數(shù)據(jù)文件損壞。(2)查看v$log視圖,用clear命令重建該日志文件。select group#,sequence#,archived,status from v$log; 查看損壞的組n是否為非當(dāng)前狀態(tài),查看是否已經(jīng)歸檔。alter database clear logfile group n;已歸檔,重建日志,或alter database clear unarchived logfile group n;未歸檔,重建日志。(3)打開數(shù)據(jù)庫。alter database open。
需要注意的是,當(dāng)前聯(lián)機(jī)日志文件的恢復(fù)方法與非當(dāng)前聯(lián)機(jī)日志文件的恢復(fù)方法不同在于,在進(jìn)行上述步驟(2)查看v$log視圖時,確認(rèn)損壞的組n為當(dāng)前狀態(tài),直接執(zhí)行recover database until cancel,先選擇auto,恢復(fù)可以利用的歸檔日志,然后重新執(zhí)行 recover database until cancel,輸入cancel,完成不完全恢復(fù),也就是說恢復(fù)兩次。最后執(zhí)行alter database open resetlogs打開數(shù)據(jù)庫。
2.3 控制文件損壞的恢復(fù)方法 單個控制文件損壞可通過復(fù)制其他正常的控制文件替換損壞的控制文件來解決?!败娦l(wèi)一號”his數(shù)據(jù)庫控制文件為3個,而且都互為鏡像,只要拷貝一個就可以。如所有的控制文件都損壞,則需要重新建立控制文件。操作如下:(1)在備用服務(wù)器上用sys用戶備份控制文件腳本。alter database backup control file to trace;備份控制文件腳本。腳本文件位于product10.2.0adminorcludump目錄下,名稱為orcl_ora_*.trc。(2)提取以 startup nomount開頭,以 alter database open結(jié)束的腳本段。在主服務(wù)器上執(zhí)行,啟動數(shù)據(jù)庫。
2.4 回滾數(shù)據(jù)文件損壞的恢復(fù)方法 回滾段表空間中的一個數(shù)據(jù)文件丟失或者損壞導(dǎo)致數(shù)據(jù)庫無法識別它,在啟動數(shù)據(jù)庫的時候會出現(xiàn)ora-1157,ora-1110的錯誤,或者操作系統(tǒng)級別的錯誤,例如ora-7360。在關(guān)閉數(shù)據(jù)庫的時候 (normal或者immediate)會出現(xiàn) ora-1116,ora-1110 的錯誤,或者操作系統(tǒng)級別的錯誤,例如ora-7368。(1)offline存在丟失或損壞的數(shù)據(jù)文件的回滾段表空間中的所有回滾段:alter rollback segment<rollback_segment>offline。(2)刪除掉那個包含損壞文件的回滾段表空 間 :drop tablespace<tablespace_name>including contents。(3)重建回滾段并online聯(lián)機(jī)。
2.5 臨時數(shù)據(jù)文件損壞的恢復(fù)方法 臨時數(shù)據(jù)文件的恢復(fù)比較簡單,因為臨時數(shù)據(jù)文件中不涉及其他的有用的數(shù)據(jù),所以可以刪除后重建。
“軍衛(wèi)一號”系統(tǒng)自1997年在軍內(nèi)外醫(yī)院推廣至今,應(yīng)用已有近千家醫(yī)院,運行良好,其基礎(chǔ)架構(gòu)穩(wěn)固,數(shù)據(jù)結(jié)構(gòu)完整規(guī)范,模塊支持自定義擴(kuò)展維護(hù)[7]。但運行期間,部分醫(yī)院也因硬盤壞道、系統(tǒng)崩潰、意外掉電等原因造成數(shù)據(jù)庫宕機(jī)系統(tǒng)癱瘓,甚至出現(xiàn)醫(yī)療數(shù)據(jù)丟失的情況。某綜合醫(yī)院還因定期切換數(shù)據(jù)庫服務(wù)器時操作錯誤,部分醫(yī)療數(shù)據(jù)被覆蓋,造成醫(yī)療數(shù)據(jù)丟失且不可挽回[8,9]。 所以采取適當(dāng)?shù)臄?shù)據(jù)庫備份和恢復(fù)方法非常重要。
該文介紹了“軍衛(wèi)一號”his數(shù)據(jù)庫的不同數(shù)據(jù)庫文件類型的文件損壞的恢復(fù)方法。針對不同類型的損壞數(shù)據(jù)文件采用不同的恢復(fù)方法,能夠在第一時間完成數(shù)據(jù)恢復(fù),保障系統(tǒng)正常運行?!败娦l(wèi)一號”his數(shù)據(jù)庫容災(zāi)要求數(shù)據(jù)零丟失,災(zāi)難恢復(fù)時宕機(jī)時間短,不影響正常醫(yī)院業(yè)務(wù)運行。數(shù)據(jù)丟失會給醫(yī)院的業(yè)務(wù)工作帶來負(fù)面影響,所以在數(shù)據(jù)庫容災(zāi)恢復(fù)時要求采取數(shù)據(jù)完全恢復(fù)。這要求醫(yī)院信息部門做好數(shù)據(jù)庫的日常備份和容災(zāi)工作。目前常用的“軍衛(wèi)一號”數(shù)據(jù)庫備份方案,除了軍衛(wèi)系統(tǒng)自帶的熱備份軟件加日志文件異地同步備份方案外,還有一種oracle數(shù)據(jù)庫的dataguard技術(shù)方案。dataguard方案是一種高可用性數(shù)據(jù)庫方案,是目前理想的數(shù)據(jù)庫全庫備份方案。筆者所在醫(yī)院已實現(xiàn) “軍衛(wèi)一號”his數(shù)據(jù)庫的dataguard數(shù)據(jù)異地容災(zāi)[10-13],并成功運行2年時間,實現(xiàn)his數(shù)據(jù)庫實時同步備份,數(shù)據(jù)零丟失,保障了醫(yī)院業(yè)務(wù)的正常運行。