王兴强,孟 娜
[作者单位]250031山东济南,原济南军区总医院信息科(王兴强,孟娜)
[关键字] 军卫一号;数据库;恢复
笔者所在医院“军卫一号”信息系统运行十余年,his数据库经历了由 oracle 8i升级至 oracle 10g,由32位升级至64位,数据库服务器也不断更新换代,从而保障了业务系统的正常运行,但数据库的安全性及稳定性仍然是医院信息部门维护的重中之重,硬件故障、软件故障、网络故障、进程故障和系统故障都会造成数据库的宕机,导致数据的丢失,给医院的业务造成非常严重的后果。医院信息部门需要根据数据库不同的异常情况,采取相应的恢复方法[1-6],对数据库进行有针对性的恢复。
该文提出了“军卫一号”数据库不同类型数据库文件损坏的恢复方法,可以规避数据库宕机而数据无法恢复的严重后果,保障了“军卫一号”数据库的安全稳定运行。
当数据库正常运行时,由于计算机系统的某些故障(如内存错误、硬盘坏道、系统崩溃、意外掉电等)会影响数据库系统的操作,影响数据库中数据的正确性、可靠性、数据一致性,有时甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后重构这个完整的数据库,即为数据库恢复。数据库文件损坏所需要的恢复为数据库文件介质的恢复 (“军卫一号”his数据库对数据的安全性有着严格的要求,该文介绍的数据库恢复方法均在数据库归档模式下,且进行完全数据恢复,同时可减少宕机时间)。
“军卫一号”his数据库包括数据文件、联机日志文件、控制文件、回滚数据文件、临时数据文件等多种文件类型。
2.1 数据文件损坏的恢复方法 损坏或丢失单个数据文件,利用备份数据库和归档日志进行恢复,可以减少宕机时间,并进行数据库的完全恢复,从备份后到数据库崩溃时的数据都不会丢失。(1)启动数据库错误,脱机该数据文件。操作如下:startup;启动数据库报 ora-01157、ora-01110错误;alter database datafile n offline drop;脱机数据文件,n为文件序号。(2)打开数据库,拷贝备份数据文件,恢复该数据文件,并联机。操作如下:alter database open; 打开数据库;copy d:databakapcomm.dbf d:oracleoradataorcl;拷贝备份文件从备份处;recover datafile n;恢复该数据文件;alter database datafile n online;恢复成功,联机该数据文件。
需要注意的是,在恢复过程中,如果有多个数据文件损坏,可以采用一个一个数据文件的恢复方法(需要对数据文件一一脱机,再对数据文件分别恢复),也可以采用整个数据库的恢复方法;但如果是系统表空间文件损坏,不能采用此方法。
2.2 联机日志文件损坏的恢复方法 联机日志文件分为当前联机日志文件和非当前联机日志文件,两种联机日志文件的损坏恢复方法不同,非当前联机日志文件损坏可通过clear命令解决问题,当前联机日志文件损坏需要recover命令进行不完全数据恢复。
非当前联机日志文件恢复:(1)启动数据库。startup;启动数据库报ora-00312或ora-00313错误,提示日志组n的数据文件损坏。(2)查看v$log视图,用clear命令重建该日志文件。select group#,sequence#,archived,status from v$log; 查看损坏的组n是否为非当前状态,查看是否已经归档。alter database clear logfile group n;已归档,重建日志,或alter database clear unarchived logfile group n;未归档,重建日志。(3)打开数据库。alter database open。
需要注意的是,当前联机日志文件的恢复方法与非当前联机日志文件的恢复方法不同在于,在进行上述步骤(2)查看v$log视图时,确认损坏的组n为当前状态,直接执行recover database until cancel,先选择auto,恢复可以利用的归档日志,然后重新执行 recover database until cancel,输入cancel,完成不完全恢复,也就是说恢复两次。最后执行alter database open resetlogs打开数据库。
2.3 控制文件损坏的恢复方法 单个控制文件损坏可通过复制其他正常的控制文件替换损坏的控制文件来解决。“军卫一号”his数据库控制文件为3个,而且都互为镜像,只要拷贝一个就可以。如所有的控制文件都损坏,则需要重新建立控制文件。操作如下:(1)在备用服务器上用sys用户备份控制文件脚本。alter database backup control file to trace;备份控制文件脚本。脚本文件位于product10.2.0adminorcludump目录下,名称为orcl_ora_*.trc。(2)提取以 startup nomount开头,以 alter database open结束的脚本段。在主服务器上执行,启动数据库。
2.4 回滚数据文件损坏的恢复方法 回滚段表空间中的一个数据文件丢失或者损坏导致数据库无法识别它,在启动数据库的时候会出现ora-1157,ora-1110的错误,或者操作系统级别的错误,例如ora-7360。在关闭数据库的时候 (normal或者immediate)会出现 ora-1116,ora-1110 的错误,或者操作系统级别的错误,例如ora-7368。(1)offline存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段:alter rollback segment<rollback_segment>offline。(2)删除掉那个包含损坏文件的回滚段表空 间 :drop tablespace<tablespace_name>including contents。(3)重建回滚段并online联机。
2.5 临时数据文件损坏的恢复方法 临时数据文件的恢复比较简单,因为临时数据文件中不涉及其他的有用的数据,所以可以删除后重建。
“军卫一号”系统自1997年在军内外医院推广至今,应用已有近千家医院,运行良好,其基础架构稳固,数据结构完整规范,模块支持自定义扩展维护[7]。但运行期间,部分医院也因硬盘坏道、系统崩溃、意外掉电等原因造成数据库宕机系统瘫痪,甚至出现医疗数据丢失的情况。某综合医院还因定期切换数据库服务器时操作错误,部分医疗数据被覆盖,造成医疗数据丢失且不可挽回[8,9]。 所以采取适当的数据库备份和恢复方法非常重要。
该文介绍了“军卫一号”his数据库的不同数据库文件类型的文件损坏的恢复方法。针对不同类型的损坏数据文件采用不同的恢复方法,能够在第一时间完成数据恢复,保障系统正常运行。“军卫一号”his数据库容灾要求数据零丢失,灾难恢复时宕机时间短,不影响正常医院业务运行。数据丢失会给医院的业务工作带来负面影响,所以在数据库容灾恢复时要求采取数据完全恢复。这要求医院信息部门做好数据库的日常备份和容灾工作。目前常用的“军卫一号”数据库备份方案,除了军卫系统自带的热备份软件加日志文件异地同步备份方案外,还有一种oracle数据库的dataguard技术方案。dataguard方案是一种高可用性数据库方案,是目前理想的数据库全库备份方案。笔者所在医院已实现 “军卫一号”his数据库的dataguard数据异地容灾[10-13],并成功运行2年时间,实现his数据库实时同步备份,数据零丢失,保障了医院业务的正常运行。