唐 紅,蘇麗娟
“軍衛(wèi)一號(hào)”數(shù)據(jù)庫(kù)升級(jí)設(shè)計(jì)與應(yīng)用研究
唐紅,蘇麗娟
目的:實(shí)現(xiàn)“軍衛(wèi)一號(hào)”服務(wù)器的硬件升級(jí)、操作系統(tǒng)升級(jí)以及數(shù)據(jù)庫(kù)版本從Oracle 8.1.7至Oracle 10g的升級(jí)。方法:以服務(wù)器軟硬件升級(jí)為基礎(chǔ),原數(shù)據(jù)庫(kù)的數(shù)據(jù)按“用戶方案”模式導(dǎo)出,安裝Oracle 10g軟件并新建數(shù)據(jù)庫(kù),通過(guò)編寫數(shù)據(jù)庫(kù)升級(jí)腳本并利用Oracle的Exp/Imp工具實(shí)現(xiàn)數(shù)據(jù)遷移。結(jié)果:成功完成Oracle版本升級(jí)以及數(shù)據(jù)庫(kù)遷移。升級(jí)后服務(wù)器性能得到明顯提升。結(jié)論:該方法停機(jī)時(shí)間短,對(duì)醫(yī)院正常工作影響小并且保證數(shù)據(jù)的高度安全性,不會(huì)造成數(shù)據(jù)丟失。
Oracle;升級(jí);Exp/Imp;軍衛(wèi)一號(hào);醫(yī)院信息管理系統(tǒng)
隨著計(jì)算機(jī)技術(shù)的發(fā)展和醫(yī)療水平的提高,醫(yī)院信息管理系統(tǒng)(hospital information system,HIS)在醫(yī)院的地位舉足輕重[1-4]。部隊(duì)醫(yī)療機(jī)構(gòu)普遍建立了以“軍衛(wèi)一號(hào)”為基礎(chǔ)的HIS,在日常業(yè)務(wù)工作中發(fā)揮著重要作用。但是,隨著醫(yī)院業(yè)務(wù)量的增加、工作站的增多以及各種數(shù)據(jù)庫(kù)應(yīng)用的加入使得HIS數(shù)據(jù)服務(wù)器面臨著嚴(yán)峻的考驗(yàn)。在醫(yī)院業(yè)務(wù)的高峰期,部分子系統(tǒng)訪問(wèn)數(shù)據(jù)緩慢,尤其是門診掛號(hào)系統(tǒng)出票速度慢,不僅耽誤了患者的就醫(yī)時(shí)間,而且影響了醫(yī)院業(yè)務(wù)的正常開展[5-7]。為進(jìn)一步增強(qiáng)系統(tǒng)安全、提高服務(wù)器運(yùn)行速度,我院對(duì)服務(wù)器進(jìn)行了升級(jí),性能得到明顯提升,取得了明顯效果。
1.1硬件升級(jí)
(1)內(nèi)存升級(jí):Oracle數(shù)據(jù)庫(kù)的性能主要取決于內(nèi)存,而未升級(jí)的服務(wù)器操作系統(tǒng)為Windows 2000Server(32 bit),理論上它的最大尋址空間為4 GB,所以在訪問(wèn)量猛增的情況下出現(xiàn)內(nèi)存瓶頸是極有可能的[8]。新購(gòu)置的服務(wù)器內(nèi)存將升級(jí)至16 GB以上,可以有效地解決內(nèi)存瓶頸問(wèn)題。
(2)中央處理器(central processing unit,CPU)升級(jí):CPU的數(shù)據(jù)處理能力往往是衡量計(jì)算機(jī)性能的一個(gè)標(biāo)志,并且Oracle是一個(gè)提供并行處理能力的數(shù)據(jù)庫(kù)系統(tǒng),對(duì)CPU性能要求高。如果運(yùn)行隊(duì)列數(shù)目超過(guò)了CPU處理的數(shù)目,性能就會(huì)下降,所以新購(gòu)置的服務(wù)器必須對(duì)CPU進(jìn)行升級(jí)。
(3)硬盤升級(jí):業(yè)務(wù)量增大和數(shù)據(jù)庫(kù)用戶的增加導(dǎo)致并發(fā)容量暴增,從而使磁盤輸入/輸出(input/ output,I/O)遭遇訪問(wèn)瓶頸。通常采用增加磁盤數(shù)量提高磁盤I/O的并行訪問(wèn)效率或增加磁盤的轉(zhuǎn)速提高I/O訪問(wèn)性能。固態(tài)硬盤(solid state drives,SSD)較傳統(tǒng)硬盤(hard disk drive,HDD)性能提升非常明顯,因此,系統(tǒng)存儲(chǔ)空間可考慮采用SSD。
1.2操作系統(tǒng)升級(jí)
為了解決Oracle的內(nèi)存瓶頸問(wèn)題,服務(wù)器的操作系統(tǒng)升級(jí)為Windows 2003 Server(64 bit)[9-10]。與32 bit操作系統(tǒng)相比,64 bit操作系統(tǒng)的尋址范圍、最大內(nèi)存容量、數(shù)據(jù)傳輸和處理速度、數(shù)值精度等指標(biāo)成倍增加,CPU的處理能力得到大幅提升,尤其是對(duì)強(qiáng)烈依賴數(shù)值運(yùn)算、存在巨量數(shù)據(jù)吞吐和需要超大并發(fā)處理的應(yīng)用提升效果非常明顯。
2.1選擇合適的升級(jí)方案
Oracle升級(jí)方案有很多種:方案一是使用Oracle的升級(jí)程序——數(shù)據(jù)庫(kù)升級(jí)實(shí)用程序(database upgrade assistant,BDUA)進(jìn)行大版本之間的升級(jí),但經(jīng)過(guò)查詢,此種方案只支持Oracle 8.1.7.4.0以上版本升級(jí)到Oracle 10g,而對(duì)于Oracle 8.1.7.0.0數(shù)據(jù)庫(kù)版本,此方案不可行。方案二是下載版本間的升級(jí)包進(jìn)行升級(jí),而此種方案只適合小版本間的升級(jí),對(duì)于Oracle 8i升級(jí)到Oracle 10g這種跨幾個(gè)大版本的升級(jí),此方案完全不可行。方案三是要Oracle自帶的Imp/Exp工具進(jìn)行升級(jí)。此方案先把舊數(shù)據(jù)庫(kù)的數(shù)據(jù)按“用戶方案”模式導(dǎo)出,然后安裝Oracle 10g軟件和新建Oracle 10g的數(shù)據(jù)庫(kù),通過(guò)編寫腳本建立好邏輯結(jié)構(gòu)(用戶、表空間、授權(quán)等)和物理結(jié)構(gòu)(各數(shù)據(jù)文件等),最后再將舊庫(kù)的dump文件導(dǎo)入至新庫(kù)中。此種方案安全可靠,風(fēng)險(xiǎn)小,如果升級(jí)中遇到問(wèn)題可隨時(shí)切換回舊庫(kù)中,對(duì)生產(chǎn)環(huán)境中的用戶影響極小。因此第三種方案是Oracle 8i升級(jí)至Oracle 10g的最佳方案。
數(shù)據(jù)庫(kù)升級(jí)后的整體運(yùn)行性能表現(xiàn)良好,達(dá)到了預(yù)期目的。操作系統(tǒng)和數(shù)據(jù)庫(kù)升級(jí)到64 bit,突破了原有版本服務(wù)器內(nèi)存限制,可充分利用內(nèi)存;在雙機(jī)熱備份基礎(chǔ)上,確保單個(gè)服務(wù)器發(fā)生故障時(shí)系統(tǒng)不停機(jī);通過(guò)升級(jí),可以在磁盤陣列發(fā)生故障時(shí)快速啟用備用數(shù)據(jù)庫(kù),確保全院業(yè)務(wù)數(shù)據(jù)在短時(shí)間內(nèi)恢復(fù)正常,保證臨床工作的順利開展。
存在問(wèn)題主要表現(xiàn)在:(1)會(huì)產(chǎn)生跟蹤文件。雖然這些文件占用空間相對(duì)不大,對(duì)數(shù)據(jù)庫(kù)也沒(méi)有任何影響,但可能會(huì)造成磁盤碎片。(2)“軍衛(wèi)一號(hào)”預(yù)約掛號(hào)等子系統(tǒng)出現(xiàn)報(bào)錯(cuò)情況時(shí),需要手動(dòng)調(diào)整設(shè)置。
通過(guò)上述方法順利實(shí)現(xiàn)了數(shù)據(jù)庫(kù)軟硬件及操作系統(tǒng)的整體升級(jí)。升級(jí)后系統(tǒng)整體運(yùn)行性能得到了明顯提升,解決了以往高峰時(shí)間網(wǎng)絡(luò)速度緩慢的問(wèn)題,達(dá)到了預(yù)期目的,為醫(yī)院正常醫(yī)療工作的順利開展提供了技術(shù)保障,加強(qiáng)了醫(yī)療數(shù)據(jù)安全工作質(zhì)量。應(yīng)用實(shí)踐證明該升級(jí)方案切實(shí)可行,具有一定的實(shí)踐應(yīng)用價(jià)值。
[1] 周容容,紀(jì)亞亮.數(shù)據(jù)庫(kù)及服務(wù)器操作系統(tǒng)升級(jí)[J].醫(yī)療衛(wèi)生裝備,2013,34(4):42-43,59.
[2]劉志敏.Oracle數(shù)據(jù)庫(kù)應(yīng)用管理解決方案[M].北京:電子工業(yè)出版社,2002.
[3]張巖,李永革,張劍.“軍衛(wèi)一號(hào)”數(shù)據(jù)庫(kù)8i至11g升級(jí)實(shí)踐[J].醫(yī)療衛(wèi)生裝備,2011,32(7):51-52.
[4]ZHOU Long-fu,SHI Yi-bing,LI Yan-jun,et al.Parameter selection,analysis and evaluation of an improved particle swarm optimizer with leadership[J].Artif Intell Rev,2010,34(4):343-367.
[5]李玉萍,于廣遠(yuǎn),張守波.“軍衛(wèi)1號(hào)”醫(yī)院信息系統(tǒng)服務(wù)器全面升級(jí)[J].醫(yī)療設(shè)備信息,2004,19(11):21-23.
[6]程躍斌,林亞忠.基于64位Windows 2003和Oracle 10g RAC的“軍衛(wèi)一號(hào)”數(shù)據(jù)庫(kù)的升級(jí)[J].醫(yī)療衛(wèi)生裝備,2010,31(10):68-70.
[7]王麗娜,張東軍,張午光.對(duì)37所醫(yī)院信息系統(tǒng)信息安全現(xiàn)狀的調(diào)查及對(duì)策探討[J].醫(yī)療衛(wèi)生裝備,2014,35(7):111-113,152.
[8]王建棟.利用Oracle事件觸發(fā)器提高“軍衛(wèi)一號(hào)”系統(tǒng)的安全性[J].醫(yī)療衛(wèi)生裝備,2007,28(1):52-53.
[9]潘奕,吳慶華,楊人懿.軍衛(wèi)一號(hào)系統(tǒng)升級(jí)中的一些問(wèn)題及其對(duì)策分析[J].西南軍醫(yī),2009,11(1):139.
[10]徐正雄,王玲,喬靜,等.用Exp/Imp實(shí)現(xiàn)“軍衛(wèi)一號(hào)”從Oracle8i到Oracle10g的升級(jí)[J].醫(yī)療衛(wèi)生裝備,2009,30(1):55-56.
(收稿:2014-10-18修回:2015-01-30)
(欄目責(zé)任編校:李惠萍)
Design and application of upgrading No.1 Military Medical Project database
TANG Hong,SU Li-juan
(Department of Information,the 452nd Hospital of the PLA,Chengdu 610061,China)
Objective To upgrade the hardware,operating system and Oracle 8.1.7 database to Oracle 10g database for No.1 Military Medial Project.Methods The hardware and operating system were upgraded,and then the data of the original were exported under customer scheme mode.Oracle 10g database was established,and database upgrade script and Oracle Exp/Imp tool were used to realize data transfer.Results Oracle upgrade and database transfer were completed, and the performances of the server were enhanced greatly.Conclusion The upgrade is executed with short down time,few influences on hospital operation and high data safety.[Chinese Medical Equipment Journal,2015,36(10):65-67]
Oracle;upgrade;Exp/Imp;No.1 Military Medial Project;HIS
[中國(guó)圖書資料分類號(hào)]R318;TP311.13A
1003-8868(2015)10-0065-03
10.7687/J.ISSN1003-8868.2015.10.065
唐紅(1977—),女,工程師,主要從事數(shù)據(jù)庫(kù)安全、網(wǎng)絡(luò)維護(hù)等方面的研究工作,E-mail:20351386@qq.com。
610061成都,解放軍452醫(yī)院信息科(唐紅,蘇麗娟)
2.2安裝Oracle 10g數(shù)據(jù)庫(kù)軟件(版本10.2.0.1.0)
在新的服務(wù)器上安裝Oracle10g(版本10.2.0.1.0)的詳細(xì)過(guò)程這里就不再贅述。但是安裝過(guò)程中需要注意:(1)在新建數(shù)據(jù)庫(kù)時(shí)注意字符集的選擇,“軍衛(wèi)一號(hào)”的字符集為US7ASCII,如果選擇錯(cuò)誤,那么在導(dǎo)入舊庫(kù)數(shù)據(jù)后讀取的數(shù)據(jù)一定是亂碼。(2)內(nèi)存的分配。較為理想的內(nèi)存分配方案為:系統(tǒng)全局區(qū)(system global area,SGA)占50%的物理內(nèi)存,程序全局區(qū)(program global area,PGA)和操作系統(tǒng)各占25%的物理內(nèi)存,具體設(shè)置可以根據(jù)實(shí)地環(huán)境參考此比例進(jìn)行微調(diào)。(3)新建數(shù)據(jù)庫(kù)的安全標(biāo)志符(security identifiers,SID)。(4)Redo log files、Data files及Archive log files盡量放在不同的磁盤上,這樣可以使磁盤的I/O負(fù)載均衡。
2.3數(shù)據(jù)庫(kù)軟件升級(jí)Oracle 10g步驟(10.2.0.1.0升級(jí)至10.2.0.4.0)
2.3.1在Oracle注冊(cè)并下載補(bǔ)丁 p6810189及p8350262
p6810189_10204_MSWIN-x86-64為 Oracle 10.2.0.1.0升級(jí)至10.2.0.4.0的補(bǔ)丁安裝包;p8350262_ 10204_Generic為Oracle 10.2.0.4 EM證書過(guò)期的補(bǔ)丁。
2.3.2停止與Oralce相關(guān)的服務(wù)及進(jìn)程
運(yùn)行emctl stop dbconsole、isqlplusctl stop、lsnrctl stop。
運(yùn)行sqlplus,以sysdba登錄,然后SQL>shutdown immediate。
重啟服務(wù)器進(jìn)入安全模式進(jìn)行補(bǔ)丁安裝。
SQL>lsnrctl start//*安裝完畢后,啟動(dòng)監(jiān)聽(tīng)器SQL>STARTUP UPGRADE//打開數(shù)據(jù)庫(kù)
SQL>spool/home/oracle/patch.log//升級(jí)數(shù)據(jù)字典
SQL>@?/rdbms/admin/catupgrd.sql
SQL>spool off;
SQL>@?/rdbms/admin/utlrp.sql//編譯所有無(wú)效對(duì)象
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP
SQL>SELECT COMP_NAME,VERSION,STATUS FROM SYS.DBA_REGISTRY;
如果運(yùn)行的所有輸出都為VALID表示升級(jí)成功。
2.4搭建Oracle數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)
2.4.1創(chuàng)建數(shù)據(jù)庫(kù)的Tablespace
在舊庫(kù)中運(yùn)行語(yǔ)句select tablespace_name from dba_tablespaces得到舊庫(kù)的表空間名稱。創(chuàng)建新表空間的腳本示例代碼如下:
create tablespace TSP_ACCT
datafile'D:oracleproduct10.2.0oradataORCL APACCT.dbf'
size 20 M
reuse
autoextend on
next 5 M
maxsize unlimited;
2.4.2創(chuàng)建數(shù)據(jù)庫(kù)的Owner
在舊庫(kù)中運(yùn)行語(yǔ)句 select distinct owner from dba_tab_privs得到舊庫(kù)中的Owner。創(chuàng)建新Owner的腳本示例代碼如下:
create user CARD
identified by CARD
default tablespace TSP_CARD
temporary tablespace TEMP
quota unlimited on TSP_CARD;
grant connect,resource to CARD;
2.4.3創(chuàng)建數(shù)據(jù)庫(kù)的Roles
在舊庫(kù)中運(yùn)行語(yǔ)句select*from dba_roles where role like'ROLE%'得到舊庫(kù)的所有角色信息。由于“軍衛(wèi)一號(hào)”在最初創(chuàng)建角色名稱時(shí)都以ROLE開頭,所以這里使用like'ROLE%'可以方便準(zhǔn)確地提取到HIS的所有角色。創(chuàng)建Roles的示例代碼如下:
CREATE ROLE ROLE_ADT NOT IDENTIFIED;
2.4.4創(chuàng)建數(shù)據(jù)庫(kù)的Users
在舊庫(kù)中運(yùn)行語(yǔ)句select USERNAME,PASSWORD,DEFAULT_TABLESPACE,TEMPORARY_TA BLESPACE from DBA_USERS得到舊庫(kù)的用戶信息。根據(jù)查詢的結(jié)果編寫生成User的腳本并運(yùn)行腳本。創(chuàng)建Users的示例代碼如下:
CREATE USER JONES IDENTIFIED BY VALUES'B9E99443032F059D'DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
2.4.5創(chuàng)建數(shù)據(jù)庫(kù)的Synonyms
在舊庫(kù)中運(yùn)行語(yǔ)句select SYNONYM_NAME,TABLE_OWNER,TABLE_NAMEfromDBA_SYNONYMS得到舊庫(kù)的同義詞信息。根據(jù)查詢結(jié)果編寫生成同義詞的腳本并運(yùn)行腳本。創(chuàng)建Synonyms的示例代碼如下:
CREATEPUBLICSYNONYMDBA_CARTRIDGES FOR ORDSYS.DBA_CARTRIDGES;
2.4.6創(chuàng)建數(shù)據(jù)庫(kù)的角色授權(quán)
在舊庫(kù)中運(yùn)行語(yǔ)句 select GRANTED_ROLE, GRANTEE from DBA_ROLE_PRIVS得到舊庫(kù)的角色授權(quán)信息。根據(jù)查詢結(jié)果編寫生成角色授權(quán)的腳本并運(yùn)行腳本。創(chuàng)建角色授權(quán)的示例代碼如下:
GRANT CONNECT TO ACCT;GRANT RESOURCE TO ACCT;
2.5導(dǎo)出舊庫(kù)服務(wù)器數(shù)據(jù)
Oracle的導(dǎo)出工具EXP有完全模式、用戶模式和表模式3種導(dǎo)出模式。采用用戶模式對(duì)舊庫(kù)的數(shù)據(jù)進(jìn)行導(dǎo)出操作。根據(jù)各個(gè)Owner在實(shí)際生產(chǎn)庫(kù)中所占空間的大小進(jìn)行分組導(dǎo)出,將數(shù)據(jù)庫(kù)導(dǎo)出到多個(gè)DMP文件。為了進(jìn)一步提高數(shù)據(jù)庫(kù)遷移的效率,在新服務(wù)器上建立一個(gè)共享文件夾來(lái)接收舊庫(kù)導(dǎo)出文件,省去了導(dǎo)出文件再拷貝到新服務(wù)器上的時(shí)間。使用導(dǎo)出工具的示例代碼如下:
exp system/psw
file=\192.168.1.110zmingEXP1.DMP
buffer=10240000
log=\192.168.1.110zmingEXP1.LOG
owner=(EXAM,ACCT,SURGERY,FUND,INFO)
2.6向新服務(wù)器導(dǎo)入數(shù)據(jù)
Oracle的導(dǎo)入工具IMP也有完全模式、用戶模式和表模式3種導(dǎo)入模式。采用完全模式對(duì)舊庫(kù)的數(shù)據(jù)庫(kù)進(jìn)行導(dǎo)入操作。在向新庫(kù)數(shù)據(jù)導(dǎo)入時(shí)就可以同時(shí)開啟多個(gè)批處理文件進(jìn)行多個(gè)導(dǎo)入操作。使用導(dǎo)入工具的示例代碼如下:
imp system/psw file=E:zmingEXP1.DMP log=D: logIMP1.log full=y grants=y commit=y buffer= 10240000
2.7編譯無(wú)效對(duì)象
數(shù)據(jù)成功導(dǎo)入后,可能會(huì)有大量的無(wú)效對(duì)象出現(xiàn),這時(shí)就需要將這些無(wú)效對(duì)象重新編譯。編譯的方法有很多種:(1)利用Oracle 10g自帶的utlrp.Sql進(jìn)行編譯;(2)使用PL/SQL Developer的tools下的compile invalid objects功能進(jìn)行編譯。
2.8壓力測(cè)試
在數(shù)據(jù)庫(kù)正式遷移前對(duì)新的服務(wù)器進(jìn)行一次壓力測(cè)試是很有必要的,壓力測(cè)試可以測(cè)出系統(tǒng)最佳性能點(diǎn)、最大承受壓力以及支持多少用戶同時(shí)訪問(wèn)等數(shù)據(jù)。選用開源工具Hammerora作為壓力測(cè)試工具。它的工作原理是捕捉Oracle的trace文件,并生成相應(yīng)的SQL腳本進(jìn)行回放,因此對(duì)用戶的場(chǎng)景模擬程度是非常高的。軟件自帶的腳本可以模擬多虛擬用戶,模擬時(shí)可以看到當(dāng)前服務(wù)器的每分鐘吞吐量(transaction per min,TPM)。通過(guò)分析得到的TMP值可以進(jìn)一步對(duì)服務(wù)器進(jìn)行調(diào)優(yōu)。