胡孝霆,朱孟軍,任軍營,李亮,王世東,李玉超
吉林省通化市解放軍第九六六〇五部隊醫(yī)院 (吉林通化 134000)
醫(yī)院“軍衛(wèi)一號”數(shù)據(jù)庫運(yùn)行在IBM3850x5服務(wù)器(64bit)+Windows 2008 Server+16GB內(nèi)存+Oracle 10g架構(gòu)下,該服務(wù)器還搭建有電子病歷(MEDDOC)和病歷結(jié)構(gòu)化數(shù)據(jù)存儲(MEDXDB)兩個數(shù)據(jù)庫實(shí)例,同時是病歷文件服務(wù)器(FTP服務(wù)器),主服務(wù)器一旦掉電或者宕機(jī),后果極為嚴(yán)重。同時,隨著醫(yī)院工作量增加和各子系統(tǒng)不斷上線,醫(yī)院主服務(wù)器面臨嚴(yán)峻考驗(yàn),在醫(yī)院業(yè)務(wù)高峰期,部分子系統(tǒng)讀寫速率緩慢,尤其是新版醫(yī)護(hù)工作站卡鈍現(xiàn)象嚴(yán)重,影響了醫(yī)院正常業(yè)務(wù)開展。為進(jìn)一步增強(qiáng)系統(tǒng)安全性,提升服務(wù)器運(yùn)行速率,醫(yī)院運(yùn)用存儲區(qū)域網(wǎng)(storage area network,SAN)技術(shù)實(shí)現(xiàn)了“軍衛(wèi)一號”數(shù)據(jù)庫遷移與升級,醫(yī)院信息系統(tǒng)(hospital information system,HIS)性能得到明顯提升,同時為其他子系統(tǒng)升級上線打下了堅實(shí)基礎(chǔ)。
1.1.1 服務(wù)器升級
新添置兩臺聯(lián)想Thinkserver SR850服務(wù)器(2個64bit Intel十二核Xeon Gold 5118處理器)+64GB內(nèi)存,每個服務(wù)器外加雙HBA卡(共4個HBA卡)用于構(gòu)建SAN,HIS服務(wù)器的更新顯著提升了數(shù)據(jù)庫的性能和可擴(kuò)展性[1]。
1.1.2 增設(shè)光纖存儲交換機(jī)和存儲設(shè)備
新購置宏杉MS2500G2-25S存儲(雙控制器,V1.2.27T05P09版本、2個4*8GbFC-IO模塊+8塊600G 10000RPM硬盤)和博科Brocade 300光纖存儲交換機(jī)(24端口交換機(jī),24端口激活,含24個模塊)各1臺。為保證系統(tǒng)的高可靠性和高可擴(kuò)展性,組建以光纖交換機(jī)為核心的SAN,從主機(jī)到SAN冗余設(shè)計,需要數(shù)據(jù)的主機(jī)通過SAN存取存儲設(shè)備上的數(shù)據(jù),見圖1。
圖1 SAN結(jié)構(gòu)
1.2.1 操作系統(tǒng)安裝
通過Thinkserver SR850服務(wù)器自帶系統(tǒng)將3塊600GB的SATA硬盤配置成RAID5,而后安裝Windows 2012 Enterprise Server x64操作系統(tǒng)。
1.2.2 故障轉(zhuǎn)移群集安裝
使用Windows故障轉(zhuǎn)移群集服務(wù)將兩臺服務(wù)器與1臺存儲、1臺域控服務(wù)器搭建成群集,其中新添置的兩臺服務(wù)器是通過心跳網(wǎng)絡(luò)進(jìn)行相互檢測的,如果在群集中的一臺服務(wù)器發(fā)生了故障,則群集中的另一臺服務(wù)器會檢測不到故障服務(wù)器的心跳信號,此時就會認(rèn)為此服務(wù)器發(fā)生故障,并立刻接手業(yè)務(wù)并繼續(xù)運(yùn)行,見圖2。
圖2 故障轉(zhuǎn)移群集
1.2.3 Oracle 軟件安裝升級
安裝Oracle 11.2.0.4 Enterprise x64 for Windows數(shù)據(jù)庫軟件。這里對軟件的安裝不做詳細(xì)說明,可以參考相應(yīng)的文檔。安裝過程中需要注意3個問題:(1)新建數(shù)據(jù)庫時注意新舊數(shù)據(jù)庫字符集的匹配。檢查字符集是UTF8還是AL16UTF16,執(zhí)行以下示例代碼可實(shí)現(xiàn)自檢:
select value
from NLS_DATABASE_PARAMETERS
where parameter = ‘NLS_NCHAR_CHARACTERSET';一定要正確選擇字符集,否則導(dǎo)入新庫的數(shù)據(jù)會顯示亂碼。(2)在定義新數(shù)據(jù)庫名稱和系統(tǒng)SID時,一般設(shè)為ORCL[2]。(3)要注意構(gòu)建好SAN后,安裝oracle軟件時數(shù)據(jù)庫的數(shù)據(jù)文件都要放在共享存儲Z盤上。
2.1.1 關(guān)閉數(shù)據(jù)庫
為確保HIS新舊數(shù)據(jù)庫的一致性,要選擇適當(dāng)?shù)臅r機(jī)關(guān)閉數(shù)據(jù)庫。提前通知各科室處理好在線業(yè)務(wù),在不影響醫(yī)療工作的情況下關(guān)閉數(shù)據(jù)庫,可執(zhí)行以下示例代碼:
SQL> sqlplus "/as sysdba"
SQL> shutdown immediate;2.1.2 對全庫做冷備份
為確保HIS數(shù)據(jù)庫遷移安全可靠,考慮先給數(shù)據(jù)庫做一次冷備份。直接拷貝oracle目錄下的admin、oradata(datafile,controlfile,redo)、flash_recovery_area3個文件以及db_1目錄下database(PWDfile、pfile)、dbs(spile)、network/admin(listener.ora、tnsnames.ora)到其他存儲設(shè)備上。
2.1.3 對全庫做熱備份
選擇oracle自帶Exp工具的完全導(dǎo)出模式,導(dǎo)出HIS老庫服務(wù)器上的數(shù)據(jù),生成一個全庫dmp文件,可執(zhí)行以下示例代碼:
2.1.4 整理老數(shù)據(jù)庫表空間,創(chuàng)建新數(shù)據(jù)庫表空間腳本
此操作要在HIS數(shù)據(jù)庫nomount狀態(tài)下執(zhí)行,可執(zhí)行以下示例代碼:
SQL> startup nomount;
SQL> alter database backup controlfile to trace;
備份當(dāng)前的控制文件到跟蹤文件中,然后到D:oracleadminoracleudump目錄的跟蹤文件中查看最新的文件,并根據(jù)文件中的數(shù)據(jù)文件生成新的表空間腳本Tablespaces.sql。
2.2.1 新庫下創(chuàng)建表空間
根據(jù)舊庫生成的表空間腳本Tablespaces.sql在新庫下創(chuàng)建表空間。例如,創(chuàng)建tsp_comm表空間,執(zhí)行以下示例代碼:
2.2.2 導(dǎo)入老數(shù)據(jù)庫生成的dmp文件
即向新數(shù)據(jù)庫導(dǎo)入dmp文件,執(zhí)行以下示例代碼:imp system/password
2.2.3 編譯無效對象
數(shù)據(jù)庫導(dǎo)入成功后,可能存在無效對象,重點(diǎn)是要查看觸發(fā)器是否完全倒過來,通常,醫(yī)院可能存在舊數(shù)據(jù)庫觸發(fā)器編寫的權(quán)限和創(chuàng)建的表空間不對,極易導(dǎo)致個別舊數(shù)據(jù)庫創(chuàng)建的觸發(fā)器沒有成功導(dǎo)出,可以使用PL/SQL Developer的tools下的compile invalid objects功能進(jìn)行編譯[3]。
2.2.4 開啟新數(shù)據(jù)庫
使用sqlplus連接數(shù)據(jù)庫,開啟自動歸檔模式,重新啟動數(shù)據(jù)庫,檢查各個系統(tǒng)是否運(yùn)行正常,有異常及時解決。
使用oracle軟件中的資源管理器(resource manager,rman)對數(shù)據(jù)庫進(jìn)行備份恢復(fù)管理,設(shè)置rman在nocatalog模式下工作,即用控制文件(control file)作為資料檔案庫(catalog),每次備份信息都要寫在控制文件里。因此,當(dāng)使用rman nocatalog方式備份時,備份control file也非常重要。
使用Windows自帶的計劃任務(wù)設(shè)置,每日定時執(zhí)行備份計劃腳本rmanbackup.bat,腳本內(nèi)容示例代碼如下:
將rmanbackup.bat文件添加到計劃任務(wù)里定時執(zhí)行,備份完成后會在同一目錄下生成rmanbackup_2018-07-12.log這種格式的log文件。
編寫rmanscript.sql計劃腳本,對全庫進(jìn)行增量備份,同時要對控制文件、歸檔日志文件進(jìn)行備份,腳本內(nèi)容示例代碼如下:
為節(jié)省存儲空間,規(guī)定只保留20內(nèi)的歸檔日志文件,編寫delbackup.bat批處理文件在windows計劃任務(wù)中定期執(zhí)行,批處理腳本示例代碼如下:
forfiles /P E:Backup manbackup /M * /S /D -20 /C "cmd /c del /F /s /q
@file" >>c:delbackup.log
刪除完成后會將操作過程記錄在delbackup.log文件中。
Oracle11g具有 自動內(nèi)存優(yōu)化(auto memory tuning)的新特性,在9i中,引入了自動PGA優(yōu)化,10g中,又引入了自動SGA優(yōu)化,到了11g,所有內(nèi)存可以通過只設(shè)定一個參數(shù)實(shí)現(xiàn)全表自動優(yōu)化。只要告訴oracle有多少內(nèi)存可用,它就可以自動指定多少內(nèi)存分配給PGA、多少內(nèi)存分配給SGA和多少內(nèi)存分配給操作系統(tǒng)進(jìn)程,顯著提高了內(nèi)存使用效率。
整個HIS數(shù)據(jù)庫基于SAN結(jié)構(gòu)的存儲系統(tǒng),不但消除了單點(diǎn)故障,還提供了TB級的安全存儲,顯著提升了數(shù)據(jù)訪問效率,實(shí)現(xiàn)了整個SAN的智能化管理[4]。同時,在雙機(jī)熱備的基礎(chǔ)上,一臺服務(wù)器在群集中出現(xiàn)故障后,群集中的另一臺服務(wù)器會立刻接手業(yè)務(wù)并繼續(xù)運(yùn)行,明顯提升了HIS服務(wù)器的整體性能和穩(wěn)定性。
從醫(yī)院管理的角度分析,備份醫(yī)療數(shù)據(jù)十分重要,數(shù)據(jù)一旦丟失會造成不可估量的損失,因此數(shù)據(jù)都被統(tǒng)一保存在存儲設(shè)備上,光纖通道SAN提供了高性能、海量數(shù)據(jù)傳輸?shù)哪芰?,有利于?shù)據(jù)備份和恢復(fù)[5]。
通過運(yùn)用SAN技術(shù)實(shí)現(xiàn)了“軍衛(wèi)一號”數(shù)據(jù)庫遷移與升級,同時利用Oracle Emp/Imp 工具實(shí)現(xiàn)了數(shù)據(jù)庫從Oracle 10g到Oracle 11g版本的升級,最后使用Oracle資源管理器對數(shù)據(jù)庫進(jìn)行了合理備份。升級后系統(tǒng)整體運(yùn)行性能明顯提高,達(dá)到了既定目標(biāo),為下一步各個子系統(tǒng)(實(shí)驗(yàn)室信息系統(tǒng)、影響歸檔和通信系統(tǒng)、手術(shù)麻醉管理系統(tǒng)等)更新上線提供了穩(wěn)定的技術(shù)環(huán)境保障,應(yīng)用實(shí)踐證明該升級方案切實(shí)可行。