如何挽救Sybase数据库恢复失败

如何挽救Sybase数据库恢复失败
人民银行抚州市中心支行 夏 沅

--------------------------------------------------------------------------------



国家外汇管理信息系统(简称SAFE-MIS)是一套综合信息服务平台,包含了数据采集系统、业务管理系统、综合分析系统、辅助决策与预测预警系统,是我国外汇管理电子化的核心项目。其中综合分析系统利用业务分类指标数据进行统计分析,产生外汇局的综合指标数据,动态生成各类统计报表,借助外汇局和其他部委的综合指标数据辅助生成分析报告等;辅助决策与预测预警系统则是利用综合指标数据、业务分类指标数据,借助统计分析模型和建立的“知识库”,配合专家系统工具,产生决策支持信息和预测预警信息;数据采集系统是通过采集基础数据以及对电子数据的直接提取,从银行采集涉外收支、境内外汇流动、外汇帐户、远期结售汇等外汇信息,从海关采集进出口货物的报关单信息,从其它渠道采集信息,如外经贸部、证交所、外汇交易中心以及对基本代码、客户的基本信息维护。数据采集系统负责采集信息源头部门(如商业银行、海关、外汇交易中心、外汇局等)的基础数据,以及实现外汇局间、外汇局与其他部委间的数据剥离与交换。由此,数据采集系统是整个外汇管理信息系统的基础,而数据仓库是整个外汇管理信息系统的重心,SAFE-MIS利用Sybase的数据仓库技术,为信息处理提供强大的后台数据仓库支持。如果数据库恢复意外失败,势必会影响数据仓库的运作。
作为数据仓库,没有数据积累是没有意义的,但数据仓库的数据过于集中,也将带来一定的风险,执行有效的数据仓库策略也会大打折扣。在实际工作中,笔者遇到一例数据仓库恢复失败的故障。
1.故障现象
客户端应用程序显示:数据库失效,请与系统管理员联系。服务器显示Sybase数据库备份恢复失败,SQL Server能够启动,但用户库无法正常使用,对应用户库各种数据库命令均不能使用,应用系统无法正常使用。
2.故障分析
(1)经检查Sybase数据库日志文件/usr/sybase/install/errorlog,获取以下出错信息:
00:01/05/13 13:40:30.22 server error: 926, severity: 14, state: 1
00:01/05/13 13:40:30.22 server database 'bank' cannot be opened. an earlier attempt at recovery marked it 'suspect'. check the sql server errorlog for information as to the cause.
00:01/05/13 13:40:30.22 server unable to proceed with the recovery of dbid 〈4〉 because of previous errors. continuing with the next database.
00:01/05/13 13:40:30.31 server recovering database 'saec'..
从该信息中可以看到,Master数据库并未损坏,数据库

启动时无法打开Bank库,在前一次恢复中它被加上“SUSPECT”标志,该库被“挂起”。Bank库是外汇管理信息系统中国际收支统计监测系统的主要用户库,它的恢复失败必然导致应用系统无法正常使用,各专业银行的上报数据无法读入库中。
(2)用sa帐号在isql登录到SQL Server:
1> select name,status from sysdatabases
2> go
可以登录到Sybase SQL Server ,表明MASTER数据库并未损坏,但发现Bank数据库的状态标志不为0,经查阅相关手册,Bank库状态标志的值不在系统表sysdatabases的status控制位中,数据库有问题,而被Sybase“挂起”。
(3)进一步判断,数据库Bank被加上“SUSPECT”标志,错误号为926,导致数据库恢复失败的原因有几种可能:
1数据库裸设备文件丢失,初始化失败;
2数据库设备文件系统原始分区信息丢失;
3若干个磁盘设备的某一个磁盘设备损坏;
4数据库文件读写权限不正确;
5设备镜像失败;
6网络意外中断;
7操作失误。
3.挽救方法
(1)先排除导致失败原因的故障
恢复数据库设备、原始分区信息及读写权限,解除镜像、恢复网络、避免操作失误等。
(2)启动Backup Server, 后备Master数据库
1>dump database master to “/usr/sybase/master_dump.20010515"
2>go
(3)修改sybase.cfg文件,设置sybase数据库允许修改系统参数
$ vi sybase.cfg
查找“allow updates”,将其值修改为1(缺省为0)
用isql登录到SQL Server,用sa帐号
1>sp_configure “allow updates”, 1
2>go
1>begin tran
2>go
重新启动数据库。
(4)修改Master库的系统表Sysdatabases中对应Bank库的Status的值为status - 256,通知Sybase强行启动Bank库。
1>update master..sysdatabases
2>set status = status - 256
3>Where name=“bank"
4>go
如果得到(1 row affected),则
1>commit
2>go
否则
1>rollback
2>go
(5)人为改变数据库状态标志后,重新启动数据库正常,再将sybase.cfg文件中“allow updates”的值改为0。这样bank库被挂起的故障就解决了。
(6)重新启动SQL Server, 运行dbcc命令检查数据库的一致性编辑生成dbcc.sql文件:
1>dbcc checkdb(“bank")
2>go
3>dbcc checkalloc(“bank")
4>go
5>dbcc checkcatalog(“bank")
6>go
$isql -Usa -P -i dbcc.sql -o dbcc.out
grep Msg dbcc.out
(7)后备用户数据库
1>dump database bank on “/usr/sybase/bank_dump.20010518"
2>go

数据的高可靠性意味着7×24小时的不间断服务,Sybase的数据仓库技术应该是一个成熟和稳定的技术。从实际应用中,我们发现,数据库的出错机会依然存在,尤其是应用程序的出错也可能引起大型应用项目

如SAFE-MIS系统的整个数据仓库的崩溃。像这样的系统出错,不是配置双机、raid盘、群集等硬件容错技术,使用冗余设备就能解决的。笔者认为管理维护数据仓库是一项重要、复杂、细致的工作,如果备份恢复失败,数据库异常时,不要轻率重装系统。数据仓库管理者有必要加强重要数据的备份,一旦在计算机出现重大故障时能迅速恢复,将损失降到最低,从而确保系统的安全、可靠、稳定运行。


相关文档
最新文档