![9fc35c4322077a8e9badeb10b4f17c7b.png](https://i-blog.csdnimg.cn/blog_migrate/74c6db1e8a346da1d11ec51d0c60c5c1.png)
导读:通过数据库软件版本升级提升数据库的运行性能。在用的Oracle10g数据库经由Oracle11g过渡后,升级至Oracle12c。解决升级过程中遇到的软件兼容性、数据库参数调整、数据库性能优化等一系列问题。Oracle10g数据库经中间版本过渡后顺利升级至Oracle12c。数据库升级至Oracle12c后,数据库系统能够更有效地使用操作系统的硬件资源,有效提升了数据库的运行性能。
数据库升级的背景
中国人民解放军第一七四医院于2010年将军卫一号医院信息系统数据库升级至Oracle10g,已经稳定使用了8年。医院按计划对数据库服务器、存储设备、网络核心设备进行升级,同时,预见性地对数据库一并进行升级。服务器、存储设备、网络核心设备、数据库软件同步进行升级,减少了对业务系统的影响。
Oracle数据库也在发布了Oracle11g之后,继而又发布了Oracle12c,医院的数据库与最新Oracle数据库软件相比较,已经滞后了两个版本,虽然目前可以稳定运行,但可以预计的是不久后必然要进行一次升级。
中国人民解放军第一七四医院利用硬件设备升级的停机时间,一并将数据库软件升级至最新版本,未雨绸缪,避免将来再行升级需再次停机。在同一次的停机时间内完成多个硬件设备或软件的升级,大大缩短了停机时间,虽然升级的风险略有增加,但是对保障业务系统的持续运行具有重要意义。
数据库过渡版本选择
升级前的数据库版本为Oracle10.2.0.5,此版本的数据库无法直接升级至Oracle 12.2.0.1,必须经由中间版本过渡。因此必须选择一个介于在用版本与升级目标版本之间的Oracle数据库软件作为中间版本进行过渡。作为升级过渡的中间版本应当满足两个条件:一是在用的数据库版本能直接升级至中间版本,二是中间版本能直接升级至最终升级目标的数据库版本即Oracle 12.2.0.1。最终选择了Oracle11.2.0.4作为过渡版本。Oracle11.2.0.4满足作为中间过渡版本的两个必要条件。
准备工作
数据库服务器升级关系到整个HIS的稳定情况,且跨版本升级存在一定的技术难度,需要精心准备,确保数据库升级工作万无一失。
模拟升级 准备了一台性能较佳的服务器用于模拟升级,同时此服务器在正式升级操作时用作升级操作机。
在模拟升级机中模拟新服务器环境,安装与新服务器一致的操作系统,并安装升级过程需要用到的所有三个版本Oracle数据库软件,分别是: Oracle10.2.0.5、Oracle11.2.0.4、Oracle 12.2.0.1。同时安装了多个版本的数据库环境里,默认生效的是最后一个安装的数据库环境,因此需要通过修改Path路径在以便切换到指定版本的数据库软件。
模拟环境下尝试将Oracle10g版本的数据库经由Oracle11g过渡后升级至Oracle12c。数据库升级过程中,遇到的主要问题是数据库参数的调整、授权的调整问题。经多次模拟后顺利将数据库升级至Oracle12c。
应用程序测试 将各应用程序连接到Oracle12c数据库,进行模拟业务操作,以测试各个应用程序能否在Oracle12数据库中正常运行。
在测试过程中,发现了绝大部分应用程序能在Oracle12c环境中正常运行,但是必须将部署在客户端的Oracle客户端至少升级至Oracle10g。偶尔出现的触发器错误,是由于权限机制导致的,重新将触发器操作的表权限授予触发器拥有者便可解决。
后台划价程序的特殊处理 后台划价程序设计在Oracle8i的客户端下运行,但在此版本的客户端下连接Oracle12c数据库却无法正常执行划价操作。
后台划价程序在军卫一号中是必不可少的,必须解决。因为没有取得此程序的源代码,无法通过修改代码解决兼容问题。后台划价程序已稳定运行多年,重新开发新程序替代存在一定的难度和风险,能让它在新环境下继续运行才是最理想的解决方案。
通过对程序的认真分析,发现其之所以在Oralce10g客户端下无法正常运行,是由于其直接调用了Oracle8i客户端的动态链接库Orasql8.dll中的接口函数,而在Oracle10g客户端中不存在文件Orasql8.dll。认真对比了这两个不同版本客户端的文件后,发现Oracle10g客户端中也存在类似文件,但是其名称修改为Orasql10.dll。新版本向下兼容的特性,Orasql10.dll中应该存在后台划价程序需要的函数入口,将Orasql10.dll复制一份并更名为Orasql8.dll,后台划价程序便可以正常运行。
后台划价程序顺利运行地在Oracle10g客户端下,为数据库升级工作扫除了障碍。
客户端的OracleClient版本升级 在应用程序测试中,发现部分应用在Oracle8i客户端下运行会出错,但在Oracle10g或以上版本的客户端下,则可以正常运行。
综合考虑了医我院在用PC终端的操作系统对Oracle客户端的兼容情况后,决定统一部署Oracle10g客户端。全院所有PC终端,逐一检查,将安装Oracle8i客户端的PC终端全部升级至Oralce10g客户端,确保数据库升级至12c后应用程序能够正常运行。
正式切换
在多次的模拟升级中积累了一定的经验,记录了每次模拟升级过程中详细的操作步骤,归纳了模拟操作过程中的各个注意事项,并编制了一套完善的升级方案。
正式升级切换时,需经长时间的数据库停机,为将影响降至最低,提前做好各项预案。包括提早预备公布停机时间,协调各科室提前做好准备,在升级过程中停用HIS,停机期间的治疗数据先行手工记录,在系统恢复之后再逐一补录进HIS。
经过了前期的充分准备,按照预定方案进行数据库升级操作。
升级过程如下:
数据库停机
同步数据到升级操作机
升级至过渡版本Oracle11g
升级至Oracle12c
冷备数据至新服务器
启用新数据库服务器
停机操作注意事项 在Oracle10g数据库上执行手工日志切换后,关闭数据库。手工日志切换到关闭数据库的时间间隔约3分钟,为维护数据完整性,在手工日志切换前,先停掉了Oracle的监听服务,确保断开所有连接的客户端,确保在这段时间内向数据库不接收新数据。
充分利用归档日志缩短停机时间 升级操作机提前装好了Oracle10g、Oracle11g、Oracle12C的环境,并准备好Oracle10g冷备库。将升级操作机上的冷备库启动至mount状态,持续将数据库产生的归档日志拷贝并应用到升级操作机上。
停机后,数据同步所需时间等于新近产生的归档日志拷贝并应用到升级操作机上所需时间。使用本方法同步数据,实测所需时间约为10分钟。
使用Oracle自带DBUA工具升级数据库 使用Oracle的DATABASE Upgrade Assistant工具(简称DBUA)升级数据库。Oracle10g升级至Oracle11g使用Oracle11g版本的DBUA,升级至11g后,再使用Oracle12c版本的DBUA升级至Oracle12c。
升级至oracle11g后,需调整版本参数后才能继续。在sqlplus中执行如下命令进行版本参数调整:
alter system set compatible='11.2.0' scope=spfile;
shutdown immediate;
startup;
参数compatible无法在运行的实例上直接调整,需设置到参数文件SPFILE中,再重启数据库。
启用新数据库 由于升级操作需要安装三个版本的Oracle环境,所以并没有在新服务器上直接操作升级。新服务器接下来需要长期持续运行,需要尽量保持数据库软件运行环境的单纯性。
在升级操作机上操作升级后得到Oracl12c版本的的数据库。再将数据库冷备份至新服务器,最后在新服务器上启动数据库。此步骤所需时间取决于数据库文件的大小,如果数据库文件的拷贝时间占用过多时,可以采用存储转移的方式直接将数据库文件挂载到新服务器上。
本次数据库服务器软硬件升级之后,成功将最新版本的Oracle12c数据库应用在我院数据库服务器上。得益于Oracle12c的MAA内存管理技术,数据库性能得到大幅度提升。安全性上也有了更好的保障,尤其是密码策略的改善,Oracle12c数据库区分了大小写的密码机制,对口令的安全性有了进一步的优化。
文章来源:《中国数字医学》杂志2018年第11期,作者及单位:郑荣纬 庄培锋 许燊晖 杨毕辉,中国人民解放军第一七四医院。
传播数字医学领域发展最新动态,关注医疗卫生信息化相关资讯。
长按扫码关注我们
![4561e510676645914e5dc719ec2d61d5.png](https://i-blog.csdnimg.cn/blog_migrate/5a10a52c8eb65eb9eaef34aa8e83f66d.jpeg)