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