近年来, 随着医院信息化水平的不断提升, 军卫系统的各部门对信息化系统应用需求的不断深入, 各业务分系统及功能模块越来越多越细, 各功能模块需频繁升级切换, 大大增加了信息中心及各操作员的工作量。同时, 服务器配置也由原32位向64位系统过渡, “ 军字一号” 的oracle数据库版本在经历了由7.3、8i的升级后[1]。近年来, 很多医院又面临oracle10g、11g的更大跨度的升级[2]。由一套后台控制系统实现对各工作站的软件发布管理, 成为部队医院信息系统管理的当务之急。笔者以我院自2012年开始应用的《分布式安全控制系统》(以下简称安全控制系统)为例, 探讨一下分布式安全控制系统给医院管理带来的便利。
军卫系统从2001年开始在全军推广时采用的数据库为oracle7, 后很快普遍升级至oracle8i。随着时间的推移, 大多数医院HIS服务器的数据不断增加, 前台PC的性能及配置不断提升, 而oracle数据库的版本却一直在oracle8i上停滞多年, 很多医院购买了新的64位服务器, 有16 G甚至32 G以上内存, 但oracle8i只有32位版本, 最多只能用到4 G内存, 其他内存都处于闲置浪费的情况。很多医院迟迟不愿升级主要是基于以下考虑:
1.1.1 服务器升级切换时的效率问题 医院信息系统需要常年24小时不间断运行的系统, 如果升级切换的时间太长, 势必会影响正常的医疗工作。所以系统切换方案一定要追求时效, 时间越短越好。
1.1.2 系统切换的实时性问题 军卫系统由于最初使用的oracle7开发时还没有中文字符集, 虽然从oracle8以上开始了支持中文字符集, 但大部分医院仍使用的US7ASCII的英文字符集, 而地方医保系统的oracle都是中文字符集, 所以从oracle 8到10版本升级时很多医院都在考虑同时将字符集升级为中文字符集, 以便于与地方医保系统连接。而更换字符集对医院系统升级的实时性要求较高, 因为如果服务器和客户端不同步升级, 会把带有乱码的数据上传到服务器上。
由于军卫的各子系统版本复杂, 大部分医院使用的最基本的四十多个HIS子程序中, 从1.0到3.0版本均有不同的子系统在用, 全部的信息系统由数十个甚至上百个子程序组成, 程序升级需信息中心做大量工作, 前台程序的升级主要经历了以下几种方式:
1.2.1 手工升级方式 信息系统初期, 由信息中心或公司维护人员下科室一台一台地升级客户端, 时效性差, 客户端越多, 升级的周期就越长, 不推荐采用这种方式。
1.2.2 前台客户端批处理方式 可通过开机时登录服务器自动通过批处理同步服务器程序, 此方式大大减轻了信息中心工作量, 让电脑能在重启时自动检测是否有新的客户端程序而进行升级[3]。缺点是如果客户端需要安装新的子系统, 仍然需要到每个客户端去更改批处理文件。
1.2.3 域控制器脚本方式 部分医院通过域登录代码控制, 使登录的电脑程序自动与服务器一致, 解决了需要到每个客户端去更改批处理文件的工作量。但仍然远不能达到实时的效果, 解决不了服务器更改字符集等重要参数时必须实时更新的问题。
1.2.4 开发专用的升级程序 在每个子程序运行前先运行升级检测程序, 如发现服务器有新程序则自动升级[4], 此方式的优点是实时性较前有较大提高, 但需在每个客户端程序前挂接新的程序, 如升级程序出现问题仍需下科室更新, 同时由于子系统繁多, 不同程序需进行的配置较为复杂, 容易出现漏掉部分升级客户端的情况。
针对以上问题, 我们研发了安全控制系统, 不仅可以实现本地安全策略控制、U盘使用记录、客户端进程管理等, 还可实现内网的系统发布、实时升级、脚本执行等功能。
Oracle数据库由8i升级到11g前需在模拟环境中先进行大量的脚本测试[2], 测试成功后根据测试时间提前通知各科室做好准备。由于各客户端需在服务器升级至高版本数据库并启动后实时更改字符集, 我们使用安全控制系统通过本地安全控制系统实时接收到服务器端的更新指令, 升级选项采用“ 定时执行” 选项, 设置为服务器更改字符集后启动后的时间。升级时间到了以后各客户端会马上运行更改字符集批处理程序, 为防止前台客户端中部分“ 军字一号” 程序未退出, 系统管理员会在主控端点击“ 重启在线电脑” , 各客户端会弹出倒计时, 出现诸如 “ 请保存当前的程序数据, 系统将在30秒后重启” 之类的提醒, 倒数30秒后即使程序未退出, “ 安全控制” 系统也会强行关闭正在运行的程序并进行重启系统, 以保证Oracle字符集更改的实时性。未开机的电脑会在开机时直接运行升级批处理程序, 不影响直接运行军卫子系统程序, 无需再重启系统。此方法不仅适用于更改oracle字符集, 也适用于一切需更改本地程序参数的自动发布。
为确保“ 军字一号” 各客户端功能一致, 信息中心应尽可能使各科室所使用的程序版本号一致。我院经过实践, 使用分布式控制系统来发布“ 军字一号” 新程序解决了这一问题。分布式控制系统服务器端的自动批处理发布系统可设置为“ 立刻” 、“ 定时” 自动运行批处理程序, 在批处理程序中包含发布各“ 军字一号” 子程序升级代码。如发现程序的版本不对, 系统将自动升级, 以确保各客户端的程序与服务器端保持一致。为避免要升级的子系统正在运行而导致文件无法覆盖, 分布式控制系统服务器端引入了强行杀进程的机制, 在覆盖程序前, 先检测所要覆盖的进程有没有正在运行, 如果有, 则给出倒计时提醒, 提醒时间一到, 则自动关闭该进程, 使用新程序文件覆盖, 最大限度地确保前台程序数据不丢失。
传统模式即使采用最先进的域控制器及挂接升级程序的方法, 仍需信息中心的人员下科室检查是否有字符集不一致的电脑, 因为如果电脑没有重启, 就不会运行域服务器登录脚本; 外部挂接程序目前仅限于升级程序本身, 对于注册表更改、控件注册等更新较大的内容就无能为力了[4]。而分布式远程控制系统则可实现真正的实时更新, 确保了在同一时刻能够让所有的客户端与服务器的字符集同步。这种效率在越大的医院里实现切换越能体会出差异, 对前台工作人员的影响越小, 切换也就越成功。
通过分析上述三种传统发布子程序的方法, 我们发现域控制器脚本模式及挂接升级程序的方法虽然升级的效率和实时性已有较大的提升, 但仍然无法保证各子程序的一致性, 解决不了电脑一直不关机造成的升级时差。而分布式远程控制系统采取两种方式使各子程序实时升级。“ 温和方式” 可以等程序退出, 更换操作员时自动升级; “ 强制方式” 会采取倒计时的方式使程序强行关闭实现军卫子系统的自动更新, 一般用于流程有重大更变时。通过这两种方式可真正实现“ 军字一号” 各子系统版本的一致性。
我院在成功应用安全控制系统对oracle系统实现了从oracle8i至oracle11g的升级及字符集更改, 同时协助超过1000台工作站的某部队医院成功进行了此项升级。安全控制系统不仅是一个集所有程序管理于一体的安全控制平台, 而且对系统的USB口控制等多方面的本地准入权限进行管理[5], 大大提升了升级服务器及发布“ 军字一号” 子系统的效率, 适应武警部队医院对新时期保密工作的新要求, 使全院的信息化管理走上了一个新台阶。
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|