王興強,劉長興,劉國偉
“軍衛(wèi)一號”數(shù)據(jù)庫從64位到32位的異地重建
王興強,劉長興,劉國偉
目的:實現(xiàn)“軍衛(wèi)一號”數(shù)據(jù)庫從64位到32位的異地重建。方法:利用冷備份數(shù)據(jù)庫,以UPGRADE方式啟動數(shù)據(jù)庫,重建數(shù)據(jù)字典,進行整體異地恢復(fù),并重新編譯。結(jié)果:該方法成功實現(xiàn)了數(shù)據(jù)庫的異地重建。結(jié)論:該方法步驟少、操作簡單、速度快,重建后的數(shù)據(jù)庫經(jīng)嚴密測試,系統(tǒng)運行平穩(wěn)。
“軍衛(wèi)一號”;異地重建;數(shù)據(jù)庫
隨著“軍衛(wèi)一號”系統(tǒng)的深入應(yīng)用,HIS及其相關(guān)子系統(tǒng)不斷增加,數(shù)據(jù)庫連接用戶及數(shù)據(jù)量快速增長,因此對數(shù)據(jù)庫服務(wù)器的配置要求也越來越高,致使Oracle數(shù)據(jù)庫由8i升級至10g,由32位升級至64位[1-4]?!败娦l(wèi)一號”O(jiān)racle數(shù)據(jù)庫版本的不斷升級,保障了業(yè)務(wù)系統(tǒng)的正常運行[5],但同時也帶來了另外一個問題,就是系統(tǒng)研發(fā)人員或工程師對測試數(shù)據(jù)庫的硬件環(huán)境要求也很高。而在絕大多數(shù)醫(yī)院中,一般不會配置多個備用數(shù)據(jù)庫服務(wù)器或測試數(shù)據(jù)庫服務(wù)器。因此,最有效合理的解決方案就是將Oracle數(shù)據(jù)庫由64位降至32位,將服務(wù)器的64位Oracle數(shù)據(jù)庫在32位客戶機上異地重建。
服務(wù)器:Windows 2008 Server 64位+Oracle10g(10.2.0.4)64位;目標(biāo)機:W indowsXP32位+Oracle 10g(10.2.0.4)32位。
“軍衛(wèi)一號”O(jiān)racle數(shù)據(jù)庫從32位升級到64位常用的方式有2種:(1)導(dǎo)出導(dǎo)入EXP/IMP方式。在全庫導(dǎo)出后,在導(dǎo)入前需要創(chuàng)建“軍衛(wèi)一號”所有表空間、角色、用戶等信息。(2)全庫異地恢復(fù)升級。將冷備份數(shù)據(jù)庫異地恢復(fù)[6],重新編譯升級。而數(shù)據(jù)庫從64位降到32位也可以采用同樣的方法。第一種方法雖然可行,但相對比較繁瑣,需事先準(zhǔn)備生成“軍衛(wèi)一號”所有表空間、角色、用戶、授權(quán)、同義詞等相關(guān)語句,且我院“軍衛(wèi)一號”數(shù)據(jù)庫較大,導(dǎo)出導(dǎo)入時間都很長,不適合采用。因此,選用第二種方案。
首先安裝數(shù)據(jù)庫軟件Oracle10g(10.2.0.1)。安裝目錄最好與服務(wù)器的軟件安裝目錄相同。如果目標(biāo)機上已經(jīng)安裝了數(shù)據(jù)庫軟件但安裝目錄不同,在恢復(fù)時需要將數(shù)據(jù)庫文件ORCL目錄下除控制文件以外的其他文件全部放到本機與服務(wù)器的相同目錄下。如服務(wù)器上的數(shù)據(jù)庫軟件安裝目錄為E:ORACLE,數(shù)據(jù)庫文件目錄為E:ORACLEPRODUCT10.2.0 ORADATAORCL,目標(biāo)機數(shù)據(jù)庫軟件安裝目錄為C: ORACLE,在恢復(fù)時需將控制文件放在C:ORACLE PRODUCT10.2.0ORADATAORCL,而將數(shù)據(jù)庫文件ORCL目錄下除控制文件以外的其他文件全部放到E:ORACLEPRODUCT10.2.0ORADATAORCL,否則在恢復(fù)加載數(shù)據(jù)庫時會提示找不到文件。在安裝時不需要創(chuàng)建數(shù)據(jù)庫實例。
安裝數(shù)據(jù)庫補丁,升級數(shù)據(jù)庫到Oracle10.2.0.4版本。
創(chuàng)建數(shù)據(jù)庫實例ORCL,全局數(shù)據(jù)庫名稱、SID、字符集都與服務(wù)器的數(shù)據(jù)庫一致。
(1)在目標(biāo)機上啟動SQLPLUS或在CMD下鍵入SQLPLUS/NOLOG,以數(shù)據(jù)庫管理員SYSDBA身份登錄數(shù)據(jù)庫:
SQL>CONN SYS/MANAGER ASSYSDBA;
執(zhí)行語句:
SQL>SHUTDOWN IMMEDIATE;
刪除目標(biāo)機上生成的數(shù)據(jù)庫文件,將服務(wù)器上冷備份的數(shù)據(jù)庫文件(ORCL整個目錄)拷貝至目標(biāo)機數(shù)據(jù)庫文件的相應(yīng)目錄。
(2)以升級UPGRADE方式啟動數(shù)據(jù)庫,執(zhí)行語句:
SQL>STARTUPUPGRADE;
執(zhí)行結(jié)果顯示DATABASEMOUNTED及DATABASEOPENED等內(nèi)容,則表示數(shù)據(jù)庫以UPDATE方式成功啟動并打開。
(3)重新編譯PL/SQL模塊,執(zhí)行語句:
SQL>@E:ORACLEPRODUCT10.2.0DB_1 RDDBMSADMINUTLIP.SQL;
執(zhí)行結(jié)果顯示如下:
SYSTEM ALTERED. //注釋:系統(tǒng)已更改
PACKAGE CREATED. //注釋:包已創(chuàng)建
PACKAGEBODYCREATED.//注釋:包體已創(chuàng)建
GRANTSUCCEEDED. //注釋:授權(quán)成功
SYNONYM CREATED. //注釋:授權(quán)成功
PL/SQL PROCEDURE SYCCESSFULLY
COMPLETED. //注釋:PL/SQL模塊成功編譯
UTLIP.SQL腳本可以將所有現(xiàn)有的PL/SQL模塊(即程序、函數(shù)、包、類型、觸發(fā)器、視圖)在數(shù)據(jù)庫中設(shè)置為無效,并重新生成編譯代碼,執(zhí)行代碼,將PL/SQL模塊重新編譯。當(dāng)一個32位數(shù)據(jù)庫遷移到64位數(shù)據(jù)庫,PL/SQL模塊的編譯代碼會發(fā)生改變,因此,需要執(zhí)行此腳本,重新生成編譯代碼并執(zhí)行,重新編譯。反之,亦然。
(4)更新數(shù)據(jù)字典,執(zhí)行語句:
SQL>@E:ORACLEPRODUCT10.2.0DB_1RDBMSADMINCATUPGRD.SQL;
我們在升級數(shù)據(jù)庫的大版本(如Oracle 9i到ORacle10g)或大的補丁集(如10.2.0.1到10.2.0.4)時總是需要升級現(xiàn)有數(shù)據(jù)庫的數(shù)據(jù)字典(DICTIONARY),這是因為隨著Oracle版本的升級,某些對象的屬性需要改變,而這些改變操作都將體現(xiàn)在升級腳本CATUPGRD.SQL中。實際上,Oralce數(shù)據(jù)庫的每個版本的更新都需要對數(shù)據(jù)字典進行相應(yīng)的更新。Oracle數(shù)據(jù)庫從64位到32位,其數(shù)據(jù)字典也需要做相應(yīng)的更新。
(5)編譯無效PL/SQL模塊對象,執(zhí)行語句:
SQL>@E:ORACLEPRODUCT10.2.0DB_1RDBMSADMINUTLRP.SQL;
UTLRP.SQL腳本能夠?qū)L/SQL模塊中的無效對象進行重新編譯。Oracle數(shù)據(jù)庫無論進行升級、降級或是遷移,建議都需要在最后步驟中,使用UTLRP.SQL腳本對PL/SQL模塊中的無效對象進行重新編譯。
(6)重新啟動數(shù)據(jù)庫,執(zhí)行語句:
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
步驟(3)、(4)、(5)中的操作都是在以升級UPDATE方式啟動Oracle數(shù)據(jù)庫的條件下執(zhí)行的,因此,需要在執(zhí)行完后,再重新啟動數(shù)據(jù)庫。
我院主服務(wù)器上的“軍衛(wèi)一號”數(shù)據(jù)庫已增至近100 GB。在進行數(shù)據(jù)庫遷移前查看各表空間,發(fā)現(xiàn)臨時表空間超過20 GB,因此,首先重建臨時表空間,刪除原臨時表空間的文件,減小待遷移的數(shù)據(jù)庫大小。如需對數(shù)據(jù)庫再進一步的“瘦身”,則需要將主服務(wù)器上的數(shù)據(jù)庫進行熱備份或冷備份,在備用服務(wù)器上將其恢復(fù),進行SHRINK等“瘦身”操作。
經(jīng)過多次測試,我院數(shù)據(jù)庫在普通PC機上進行異地重建,整個過程超過40min。第1、2、6步各僅需數(shù)秒即可完成,第3、5步各需不到2 min,第4步更新數(shù)據(jù)字典歷時最長,超過30min,而這一步所需時間與數(shù)據(jù)庫本身的大小密切相關(guān)。
在進行數(shù)據(jù)遷移,執(zhí)行上述步驟過程時,需要特別注意以下2個問題:
(1)冷備份數(shù)據(jù)庫。只有冷備份的數(shù)據(jù)庫才能夠直接以升級UPGRADE的方式啟動數(shù)據(jù)庫。
(2)目標(biāo)機與服務(wù)器的數(shù)據(jù)庫文件所在地址要一致,否則無法恢復(fù)。
本文介紹了“軍衛(wèi)一號”數(shù)據(jù)庫從64位到32位異地重建的方法。該方法的特點在于數(shù)據(jù)庫異地重建步驟較少,操作簡單,速度快。重建后的數(shù)據(jù)庫經(jīng)嚴密測試,系統(tǒng)運行平穩(wěn)。將“軍衛(wèi)一號”數(shù)據(jù)庫從服務(wù)器遷移到普通PC機上,對于系統(tǒng)研發(fā)人員和工程師意義重大,更方便對數(shù)據(jù)庫有破壞性操作的測試性工作的研究。
本文進行異地重建的數(shù)據(jù)庫采用冷備份,而對于熱備份的數(shù)據(jù)庫從64位到32位進行異地重建不能采用此方案,因為不能以升級UPGRADE的方式直接啟動數(shù)據(jù)庫,也不能采用熱備份恢復(fù)語句(STARTUPMOUNT、RECOVER DATABASE、ALTER DATABASE OPEN)對數(shù)據(jù)庫進行恢復(fù)。多次實驗證明,熱備份數(shù)據(jù)庫不適合按照此思路從64位到32位進行異地重建。
[1]秦占偉,王在波,韓宇.“軍衛(wèi)一號”數(shù)據(jù)庫從8i到10g的遷移[J].醫(yī)療衛(wèi)生裝備,2011,32(7):53-54.
(????)(????)
[2]郭平彩,張慶豐,朱有存.“軍衛(wèi)一號”實現(xiàn)Oracle8i到Oracle10g升級方法[J].醫(yī)療衛(wèi)生裝備,2011,32(3):52-54.
[3] 嚴清明,王婕.“軍衛(wèi)一號”O(jiān)RACLE 8I升級ORACLE 10G的做法與效果[J].西南軍醫(yī),2011,13(4):769-770.
[4]程躍斌,林亞忠.基于64位Windows2003和Oracle 10g RAC的“軍衛(wèi)一號”數(shù)據(jù)庫的升級[J].醫(yī)療衛(wèi)生裝備,2010,31(10):68-70.
[5]陳忠,殷春燕.如何解決Oracle8i數(shù)據(jù)庫臨時表空間滿的問題[J].醫(yī)學(xué)信息,2011,24(11):5.
[6]馮凱,崔毅,劉書占.軍隊醫(yī)院信息系統(tǒng)數(shù)據(jù)的備份與恢復(fù)案例[J].中國醫(yī)學(xué)教育技術(shù),2010,24(3):288-290.
(收稿:2013-07-17 修回:2013-09-02)
Offsite Reconstruction of No.1 Military Medical Project Database from 64 bits to 32 bits
WANG Xing-qiang,LIU Chang-xing,LIU Guo-wei
(Departmentof Information,General Hospital of Jinan Military Area Command,Jinan 250031,China)
To ac hie v e off si t e re co ns t r uct i o n of N o.1 M i l i ta ry M edi cal Pr oj e ct d ataba se f r o m 64 b i t s to 32 b i t s.C ol d backup d ataba se,U P GR A DE s ta r t in g m o de a nd d ata di ct i o n a ry re co ns t r uct i o n w ere in volv ed to re al i z e ov er all off si t e res to r at i o n a nd re-co m p i lat i o n.O ff si t e re co ns t r uct i o n of t he d ataba se wa s im pl emen t ed s ucc ess full y.T he d ataba se is re co ns t r uct ed w i t h a f e w s t e p s,hi g h s p eed a nd hi g h s tab i l i t y.[Chinese Medical Equipment Journal,2014,35(4):61-62,78]
No.1Military MedicalProject;offsite reconstruction;database
R318;TP311
A
1003-8868(2014)04-0061-03
10.7687/J.ISSN1003-8868.2014.04.061
王興強(1979—),男,碩士,主管技師,主要從事醫(yī)院信息化、數(shù)據(jù)庫等方面的研究工作,E-mail:xingqiangwang@163.com。
250031濟南,濟南軍區(qū)總醫(yī)院信息科(王興強,劉長興,劉國偉)