關(guān)鍵詞: Oracle 數(shù)據(jù)庫 跨多版本 跨操作系統(tǒng) 升級 醫(yī)院信息系統(tǒng)
筆者醫(yī)院信息系統(tǒng)(Hospital Information System,HIS)數(shù)據(jù)庫為基于Windows 2008 系統(tǒng)的Oracle 10.2.0.5版本,數(shù)據(jù)量為800 G,單機運行。硬件設(shè)備老化,系統(tǒng)穩(wěn)定性差,隨著醫(yī)院業(yè)務(wù)量的不斷增加擴展,硬件和軟件都難以支撐日益增長的業(yè)務(wù)量和數(shù)據(jù)流[1],存在嚴(yán)重的系統(tǒng)與數(shù)據(jù)安全隱患。隨著經(jīng)濟(jì)和社會的不斷發(fā)展,對醫(yī)院信息化建設(shè)工作也提出了更高的要求[2]。HIS 數(shù)據(jù)作為醫(yī)院的核心業(yè)務(wù)數(shù)據(jù)[3],確保數(shù)據(jù)信息軟硬件的安全,運用科學(xué)的存儲方式來保護(hù)數(shù)據(jù)信息,避免遭受惡意或者意外損壞,防止數(shù)據(jù)信息的丟失[4],是醫(yī)院信息系統(tǒng)安全工作的重中之重,因此對HIS 升級迫在眉睫。
1 升級方案
為解決上述問題,經(jīng)過充分測試及論證,決定采用數(shù)據(jù)泵(expdp/impdp)工具,通過建立中間庫的方式,實現(xiàn)HIS 系統(tǒng)Oracle 數(shù)據(jù)庫從10g for Windows 到19cRAC for Linux 的跨多版本系統(tǒng)升級。本升級方案的制訂,重點解決了Oralce10g 到19c,Windows 到Linux,單機模式到RAC 模式跨多版本跨平臺升級的技術(shù)難點;數(shù)據(jù)遷移是醫(yī)院信息系統(tǒng)數(shù)據(jù)庫版本升級工作的核心環(huán)節(jié)[5],采用數(shù)據(jù)泵(expdp/impdp)工具進(jìn)行數(shù)據(jù)導(dǎo)入/導(dǎo)出保證升級過程簡單可靠,采取基于高性能硬件設(shè)備建立中轉(zhuǎn)庫的方案設(shè)計主要解決源數(shù)據(jù)庫設(shè)備老舊性能低下的問題,最大限度地縮短系統(tǒng)停機時間。此方案對源數(shù)據(jù)庫不做任何修改,如升級不成功,回退方便快捷。升級流程如圖1 所示。
2 具體方案實施
醫(yī)院信息系統(tǒng)是醫(yī)院診療業(yè)務(wù)平穩(wěn)開展的基本保障,其數(shù)據(jù)庫升級工作需做好升級前、升級實施中以及升級后的各項工作[6]。
2.1 準(zhǔn)備工作
準(zhǔn)備工作不影響業(yè)務(wù),有充分的準(zhǔn)備時間。在測試環(huán)境中對每一個步驟與技術(shù)要點進(jìn)行模擬,根據(jù)測試報告得出準(zhǔn)確的技術(shù)方案與升級實施時間計劃。
2.1.1 系統(tǒng)準(zhǔn)備
在中轉(zhuǎn)庫服務(wù)器安裝操作系統(tǒng)及數(shù)據(jù)庫版本與源數(shù)據(jù)庫一致的Oracle 10.2.0.5 版本數(shù)據(jù)庫;目標(biāo)庫服務(wù)器安裝CENTOS7.9 版本操作系統(tǒng)和Oracle 19.4 RAC集群。
在目標(biāo)庫服務(wù)器上配置NFS 并掛載到中轉(zhuǎn)庫服務(wù)器。配置目標(biāo)服務(wù)器為NFS 的服務(wù)器端;配置中轉(zhuǎn)庫為NFS 的目標(biāo)端;把目標(biāo)服務(wù)器的/data/backup 目錄映射到中轉(zhuǎn)庫的Y 盤目錄。
2.1.2 數(shù)據(jù)準(zhǔn)備
源數(shù)據(jù)庫利用RMAN 工具進(jìn)行數(shù)據(jù)庫全備份:
RMANgt; backup database;
在中轉(zhuǎn)庫上通過RMAN 工具恢復(fù)數(shù)據(jù):
RMANgt; restore database;
RMANgt; recover database;
2.2 升級過程
升級時間選擇業(yè)務(wù)量較小,對業(yè)務(wù)應(yīng)用影響最小的時間段。此次升級選擇周五23:00 開始,此時醫(yī)院業(yè)務(wù)量少,降低升級中可能出現(xiàn)的問題對業(yè)務(wù)的影響。并做好手工業(yè)務(wù)方案,提前通知各應(yīng)用單位計劃停機時間為4 h。
2.2.1 停止應(yīng)用
由于HIS 系統(tǒng)客戶端采用CS 架構(gòu),采取停止源數(shù)據(jù)庫監(jiān)聽服務(wù)和KILL 前端會話的方式停止數(shù)據(jù)庫應(yīng)用。
2.2.2 拷貝歸檔文件到中轉(zhuǎn)庫
從源數(shù)據(jù)庫拷貝歸檔文件至中轉(zhuǎn)庫:
Sqlgt;alter database checkpoint;
Sqlgt;alter system switch logfile;
2.2.3 中轉(zhuǎn)庫上應(yīng)用歸檔日志
在中轉(zhuǎn)庫上應(yīng)用歸檔日志并打開數(shù)據(jù)庫:
RMANgt;catalog start with‘ Y:\archivelog’;
RMANgt;recover database until cancel;
Sqlgt;alter database open resetlogs;
2.2.4 中轉(zhuǎn)庫上導(dǎo)出數(shù)據(jù)
中轉(zhuǎn)庫上使用expdp 工具導(dǎo)出數(shù)據(jù)expdp parfile=parfile1,parfile 腳本提前寫好,數(shù)據(jù)通過NFS 直接導(dǎo)出到目標(biāo)庫的/data/backup 目錄。
2.2.5 在目標(biāo)庫上導(dǎo)入源數(shù)據(jù)
Impdpparfile=parfile1
exclude=table_data
2.2.6 在目標(biāo)庫上禁止約束和觸發(fā)器
select 'alter table '||owner||'. '||table_name||' disableconstraint '||constraint_name||'; ' from dba_constraintswhere owner in ('AMDB_USER', 'ESB_USER', 'X5SYS_SYS', 'DOC_SYS', 'APOI_SYS') and constraint_name notlike 'BIN%' and status='ENABLED';
select 'alter trigger '||owner||'. '||trigger_name||' disable;' from dba_triggerswhere owner in ('AMDB_USER','ESB_USER', 'X5SYS_SYS', 'DOC_SYS', 'APOI_SYS') andstatus='ENABLED';
2.2.7 在目標(biāo)數(shù)據(jù)庫導(dǎo)入表數(shù)據(jù)
Impdpparfile=parfile1
include=table_data
2.2.8 啟用約束和觸發(fā)器
select 'alter table '||owner||'. '||table_name||' enableconstraint '||constraint_name||'; ' from dba_constraintswhere owner in ('AMDB_USER', 'ESB_USER', 'X5SYS_SYS', 'DOC_SYS', 'APOI_SYS') and constraint_name notlike 'BIN%' and status='DISABLED' and constraint_namelt;gt;'FK_RESOURCES_REF_EQUIPMENTS'
select 'alter trigger '||owner||'.'||trigger_name||' enable;' from dba_triggerswhere owner in ('AMDB_USER','ESB_USER', 'X5SYS_SYS', 'DOC_SYS', 'APOI_SYS') andstatus='DISABLED';
2.2.9 更改scanip
srvctl stop scan_listener
srvctl stop scan
srvctl modify scan -n 191.53.21.10
srvctl start scan
srvctl start scan_listener
2.2.10 應(yīng)用測試
通過客戶應(yīng)用端測試各業(yè)務(wù)系統(tǒng)運行是否正常,數(shù)據(jù)提取、回寫是否正確。
2.2.11 修改目標(biāo)庫IP
以上步驟完成后,驗證數(shù)據(jù)無問題,修改目標(biāo)庫IP地址,使其與生產(chǎn)庫IP 地址一致。
3 數(shù)據(jù)驗證
3.1 模擬最新數(shù)據(jù)查詢驗證
(1)遷移前在老的數(shù)據(jù)庫插入當(dāng)前的時間:
SQLgt;TIME
SQLgt; insert into system. restoretime select to_char
(sysdate, 'yyyymmdd HH24:mi:ss') time from dual;SQLgt; exit
(2)中轉(zhuǎn)庫以resetlogs 打開后查詢前插入的數(shù)據(jù)是否能查詢到:
SQLgt;Database altered.
SQLgt; alter database open resetlogs;
SQLgt;select * from system.restoretime;
(3)目標(biāo)庫數(shù)據(jù)導(dǎo)入完成后查詢之前插入的數(shù)據(jù)是否能查詢到:
SQLgt;select * from system.restoretime;
3.2 源端數(shù)據(jù)庫、目標(biāo)數(shù)據(jù)庫權(quán)限比對
具體如下:
SET FEEDBACK ON
set long 999999
SET PAGESIZE 10000
set heading off
set echo off
col sql_txt for a100
---grant role
select 'grant ' || s. GRANTED_ROLE || ' to ' || s.grantee || ';' sql_txt
from dba_role_privs@xttslink s
where s. grantee not in (select username from
oracle_default_users)
and s.admin_option = 'NO'
and not exists (select 1
from dba_role_privs ss
where ss.GRANTEE = s.GRANTEE
and ss.GRANTED_ROLE = s.GRANTED_ROLE
and ss.ADMIN_OPTION = s.ADMIN_OPTION)
union
---grant role with admin
select 'grant ' || s. GRANTED_ROLE || ' to ' || s.grantee ||
' with admin option;' sql_txt
from dba_role_privs@xttslink s
where s. grantee not in (select username from
oracle_default_users)
and s.admin_option = 'YES'
and not exists (select 1
3.3 源數(shù)據(jù)庫、目標(biāo)數(shù)據(jù)庫對象比對
獲取缺少對象的ddl 語句:
set long 100000
set pages 0
set linesize 200
col aa format a100
select dbms_metadata. get_ddl(s. object_type, s. object_
name,s.owner)||';' from dba_objects@xttslink s
where s. owner not in (select username from
oracle_default_users)
and s.owner lt;gt;'PUBLIC'
and s.object_typelt;gt;'LOB'
and object_type not like 'JAVA%'
3.4 expdp 導(dǎo)出日志和impdp 導(dǎo)入日志數(shù)據(jù)條數(shù)比對
系統(tǒng)數(shù)據(jù)庫升級最重要的是保障升級前后數(shù)據(jù)的一致性[7]。導(dǎo)出日志會詳細(xì)地記錄導(dǎo)出每張表數(shù)據(jù)的條數(shù)。導(dǎo)入日志也會顯示導(dǎo)入每張表數(shù)據(jù)的條數(shù),兩個數(shù)據(jù)要求要相等。日志數(shù)據(jù)對比如圖2 所示。
4 升級后需注意的問題
(1)升級后,Oracle 8i 以下版本的客戶端不能正常使用應(yīng)用程序,需將客戶端卸載后安裝高版本Oracle,醫(yī)院安裝的是Oracle10g 以上版本的客戶端。
(2)由于有的系統(tǒng)通過SID 訪問數(shù)據(jù)庫,因此目標(biāo)庫需要配置SID 自動轉(zhuǎn)化為服務(wù)名。
(3)在驗證過程中發(fā)現(xiàn)WM_CONCAT 函數(shù)失效,原因是Oracle 19c不支持WM_CONCAT函數(shù),需重新創(chuàng)建。
5 結(jié)語
HIS 數(shù)據(jù)庫升級必須保障醫(yī)院業(yè)務(wù)數(shù)據(jù)的連續(xù)性。升級前,需對方案進(jìn)行評估,選擇對業(yè)務(wù)影響最小,回退機制最佳且安全可靠的方案,并對升級方案進(jìn)行充分測試,對客戶端可用性進(jìn)行驗證;升級中,嚴(yán)格按照預(yù)演的方案進(jìn)行升級,并對數(shù)據(jù)進(jìn)行驗證,確保數(shù)據(jù)一致性和完整性;升級后,對各個應(yīng)用程序進(jìn)行充分測試,保證業(yè)務(wù)系統(tǒng)應(yīng)用正常。此方案在實際升級過程中安全順利,業(yè)務(wù)系統(tǒng)停機時間不到4 h,實現(xiàn)Oracle數(shù)據(jù)庫從10g for Windows 到19c RAC for Linux 的跨多版本系統(tǒng)升級,系統(tǒng)升級后性能穩(wěn)定,數(shù)據(jù)安全,可操作性強,對相同功能需求具有參考借鑒價值。