唐 红,苏丽娟
“军卫一号”数据库升级设计与应用研究
唐红,苏丽娟
目的:实现“军卫一号”服务器的硬件升级、操作系统升级以及数据库版本从Oracle 8.1.7至Oracle 10g的升级。方法:以服务器软硬件升级为基础,原数据库的数据按“用户方案”模式导出,安装Oracle 10g软件并新建数据库,通过编写数据库升级脚本并利用Oracle的Exp/Imp工具实现数据迁移。结果:成功完成Oracle版本升级以及数据库迁移。升级后服务器性能得到明显提升。结论:该方法停机时间短,对医院正常工作影响小并且保证数据的高度安全性,不会造成数据丢失。
Oracle;升级;Exp/Imp;军卫一号;医院信息管理系统
随着计算机技术的发展和医疗水平的提高,医院信息管理系统(hospital information system,HIS)在医院的地位举足轻重[1-4]。部队医疗机构普遍建立了以“军卫一号”为基础的HIS,在日常业务工作中发挥着重要作用。但是,随着医院业务量的增加、工作站的增多以及各种数据库应用的加入使得HIS数据服务器面临着严峻的考验。在医院业务的高峰期,部分子系统访问数据缓慢,尤其是门诊挂号系统出票速度慢,不仅耽误了患者的就医时间,而且影响了医院业务的正常开展[5-7]。为进一步增强系统安全、提高服务器运行速度,我院对服务器进行了升级,性能得到明显提升,取得了明显效果。
1.1硬件升级
(1)内存升级:Oracle数据库的性能主要取决于内存,而未升级的服务器操作系统为Windows 2000Server(32 bit),理论上它的最大寻址空间为4 GB,所以在访问量猛增的情况下出现内存瓶颈是极有可能的[8]。新购置的服务器内存将升级至16 GB以上,可以有效地解决内存瓶颈问题。
(2)中央处理器(central processing unit,CPU)升级:CPU的数据处理能力往往是衡量计算机性能的一个标志,并且Oracle是一个提供并行处理能力的数据库系统,对CPU性能要求高。如果运行队列数目超过了CPU处理的数目,性能就会下降,所以新购置的服务器必须对CPU进行升级。
(3)硬盘升级:业务量增大和数据库用户的增加导致并发容量暴增,从而使磁盘输入/输出(input/ output,I/O)遭遇访问瓶颈。通常采用增加磁盘数量提高磁盘I/O的并行访问效率或增加磁盘的转速提高I/O访问性能。固态硬盘(solid state drives,SSD)较传统硬盘(hard disk drive,HDD)性能提升非常明显,因此,系统存储空间可考虑采用SSD。
1.2操作系统升级
为了解决Oracle的内存瓶颈问题,服务器的操作系统升级为Windows 2003 Server(64 bit)[9-10]。与32 bit操作系统相比,64 bit操作系统的寻址范围、最大内存容量、数据传输和处理速度、数值精度等指标成倍增加,CPU的处理能力得到大幅提升,尤其是对强烈依赖数值运算、存在巨量数据吞吐和需要超大并发处理的应用提升效果非常明显。
2.1选择合适的升级方案
Oracle升级方案有很多种:方案一是使用Oracle的升级程序——数据库升级实用程序(database upgrade assistant,BDUA)进行大版本之间的升级,但经过查询,此种方案只支持Oracle 8.1.7.4.0以上版本升级到Oracle 10g,而对于Oracle 8.1.7.0.0数据库版本,此方案不可行。方案二是下载版本间的升级包进行升级,而此种方案只适合小版本间的升级,对于Oracle 8i升级到Oracle 10g这种跨几个大版本的升级,此方案完全不可行。方案三是要Oracle自带的Imp/Exp工具进行升级。此方案先把旧数据库的数据按“用户方案”模式导出,然后安装Oracle 10g软件和新建Oracle 10g的数据库,通过编写脚本建立好逻辑结构(用户、表空间、授权等)和物理结构(各数据文件等),最后再将旧库的dump文件导入至新库中。此种方案安全可靠,风险小,如果升级中遇到问题可随时切换回旧库中,对生产环境中的用户影响极小。因此第三种方案是Oracle 8i升级至Oracle 10g的最佳方案。
数据库升级后的整体运行性能表现良好,达到了预期目的。操作系统和数据库升级到64 bit,突破了原有版本服务器内存限制,可充分利用内存;在双机热备份基础上,确保单个服务器发生故障时系统不停机;通过升级,可以在磁盘阵列发生故障时快速启用备用数据库,确保全院业务数据在短时间内恢复正常,保证临床工作的顺利开展。
存在问题主要表现在:(1)会产生跟踪文件。虽然这些文件占用空间相对不大,对数据库也没有任何影响,但可能会造成磁盘碎片。(2)“军卫一号”预约挂号等子系统出现报错情况时,需要手动调整设置。
通过上述方法顺利实现了数据库软硬件及操作系统的整体升级。升级后系统整体运行性能得到了明显提升,解决了以往高峰时间网络速度缓慢的问题,达到了预期目的,为医院正常医疗工作的顺利开展提供了技术保障,加强了医疗数据安全工作质量。应用实践证明该升级方案切实可行,具有一定的实践应用价值。
[1] 周容容,纪亚亮.数据库及服务器操作系统升级[J].医疗卫生装备,2013,34(4):42-43,59.
[2]刘志敏.Oracle数据库应用管理解决方案[M].北京:电子工业出版社,2002.
[3]张岩,李永革,张剑.“军卫一号”数据库8i至11g升级实践[J].医疗卫生装备,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]李玉萍,于广远,张守波.“军卫1号”医院信息系统服务器全面升级[J].医疗设备信息,2004,19(11):21-23.
[6]程跃斌,林亚忠.基于64位Windows 2003和Oracle 10g RAC的“军卫一号”数据库的升级[J].医疗卫生装备,2010,31(10):68-70.
[7]王丽娜,张东军,张午光.对37所医院信息系统信息安全现状的调查及对策探讨[J].医疗卫生装备,2014,35(7):111-113,152.
[8]王建栋.利用Oracle事件触发器提高“军卫一号”系统的安全性[J].医疗卫生装备,2007,28(1):52-53.
[9]潘奕,吴庆华,杨人懿.军卫一号系统升级中的一些问题及其对策分析[J].西南军医,2009,11(1):139.
[10]徐正雄,王玲,乔静,等.用Exp/Imp实现“军卫一号”从Oracle8i到Oracle10g的升级[J].医疗卫生装备,2009,30(1):55-56.
(收稿:2014-10-18修回:2015-01-30)
(栏目责任编校:李惠萍)
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
[中国图书资料分类号]R318;TP311.13A
1003-8868(2015)10-0065-03
10.7687/J.ISSN1003-8868.2015.10.065
唐红(1977—),女,工程师,主要从事数据库安全、网络维护等方面的研究工作,E-mail:20351386@qq.com。
610061成都,解放军452医院信息科(唐红,苏丽娟)
2.2安装Oracle 10g数据库软件(版本10.2.0.1.0)
在新的服务器上安装Oracle10g(版本10.2.0.1.0)的详细过程这里就不再赘述。但是安装过程中需要注意:(1)在新建数据库时注意字符集的选择,“军卫一号”的字符集为US7ASCII,如果选择错误,那么在导入旧库数据后读取的数据一定是乱码。(2)内存的分配。较为理想的内存分配方案为:系统全局区(system global area,SGA)占50%的物理内存,程序全局区(program global area,PGA)和操作系统各占25%的物理内存,具体设置可以根据实地环境参考此比例进行微调。(3)新建数据库的安全标志符(security identifiers,SID)。(4)Redo log files、Data files及Archive log files尽量放在不同的磁盘上,这样可以使磁盘的I/O负载均衡。
2.3数据库软件升级Oracle 10g步骤(10.2.0.1.0升级至10.2.0.4.0)
2.3.1在Oracle注册并下载补丁 p6810189及p8350262
p6810189_10204_MSWIN-x86-64为 Oracle 10.2.0.1.0升级至10.2.0.4.0的补丁安装包;p8350262_ 10204_Generic为Oracle 10.2.0.4 EM证书过期的补丁。
2.3.2停止与Oralce相关的服务及进程
运行emctl stop dbconsole、isqlplusctl stop、lsnrctl stop。
运行sqlplus,以sysdba登录,然后SQL>shutdown immediate。
重启服务器进入安全模式进行补丁安装。
SQL>lsnrctl start//*安装完毕后,启动监听器SQL>STARTUP UPGRADE//打开数据库
SQL>spool/home/oracle/patch.log//升级数据字典
SQL>@?/rdbms/admin/catupgrd.sql
SQL>spool off;
SQL>@?/rdbms/admin/utlrp.sql//编译所有无效对象
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP
SQL>SELECT COMP_NAME,VERSION,STATUS FROM SYS.DBA_REGISTRY;
如果运行的所有输出都为VALID表示升级成功。
2.4搭建Oracle数据库逻辑结构
2.4.1创建数据库的Tablespace
在旧库中运行语句select tablespace_name from dba_tablespaces得到旧库的表空间名称。创建新表空间的脚本示例代码如下:
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创建数据库的Owner
在旧库中运行语句 select distinct owner from dba_tab_privs得到旧库中的Owner。创建新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创建数据库的Roles
在旧库中运行语句select*from dba_roles where role like'ROLE%'得到旧库的所有角色信息。由于“军卫一号”在最初创建角色名称时都以ROLE开头,所以这里使用like'ROLE%'可以方便准确地提取到HIS的所有角色。创建Roles的示例代码如下:
CREATE ROLE ROLE_ADT NOT IDENTIFIED;
2.4.4创建数据库的Users
在旧库中运行语句select USERNAME,PASSWORD,DEFAULT_TABLESPACE,TEMPORARY_TA BLESPACE from DBA_USERS得到旧库的用户信息。根据查询的结果编写生成User的脚本并运行脚本。创建Users的示例代码如下:
CREATE USER JONES IDENTIFIED BY VALUES'B9E99443032F059D'DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
2.4.5创建数据库的Synonyms
在旧库中运行语句select SYNONYM_NAME,TABLE_OWNER,TABLE_NAMEfromDBA_SYNONYMS得到旧库的同义词信息。根据查询结果编写生成同义词的脚本并运行脚本。创建Synonyms的示例代码如下:
CREATEPUBLICSYNONYMDBA_CARTRIDGES FOR ORDSYS.DBA_CARTRIDGES;
2.4.6创建数据库的角色授权
在旧库中运行语句 select GRANTED_ROLE, GRANTEE from DBA_ROLE_PRIVS得到旧库的角色授权信息。根据查询结果编写生成角色授权的脚本并运行脚本。创建角色授权的示例代码如下:
GRANT CONNECT TO ACCT;GRANT RESOURCE TO ACCT;
2.5导出旧库服务器数据
Oracle的导出工具EXP有完全模式、用户模式和表模式3种导出模式。采用用户模式对旧库的数据进行导出操作。根据各个Owner在实际生产库中所占空间的大小进行分组导出,将数据库导出到多个DMP文件。为了进一步提高数据库迁移的效率,在新服务器上建立一个共享文件夹来接收旧库导出文件,省去了导出文件再拷贝到新服务器上的时间。使用导出工具的示例代码如下:
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向新服务器导入数据
Oracle的导入工具IMP也有完全模式、用户模式和表模式3种导入模式。采用完全模式对旧库的数据库进行导入操作。在向新库数据导入时就可以同时开启多个批处理文件进行多个导入操作。使用导入工具的示例代码如下:
imp system/psw file=E:zmingEXP1.DMP log=D: logIMP1.log full=y grants=y commit=y buffer= 10240000
2.7编译无效对象
数据成功导入后,可能会有大量的无效对象出现,这时就需要将这些无效对象重新编译。编译的方法有很多种:(1)利用Oracle 10g自带的utlrp.Sql进行编译;(2)使用PL/SQL Developer的tools下的compile invalid objects功能进行编译。
2.8压力测试
在数据库正式迁移前对新的服务器进行一次压力测试是很有必要的,压力测试可以测出系统最佳性能点、最大承受压力以及支持多少用户同时访问等数据。选用开源工具Hammerora作为压力测试工具。它的工作原理是捕捉Oracle的trace文件,并生成相应的SQL脚本进行回放,因此对用户的场景模拟程度是非常高的。软件自带的脚本可以模拟多虚拟用户,模拟时可以看到当前服务器的每分钟吞吐量(transaction per min,TPM)。通过分析得到的TMP值可以进一步对服务器进行调优。