【问题描述】
账套进入提示无效过程调用或参数、数据库可疑(数据库置疑)、点击某功能报错系统会异常退出等数据库损坏的报错。
【场景介绍】
问题描述中的报错都有可能是数据库损坏,数据库损坏的最常见原因就是断电,但不代表没有断电就不会引起数据库损坏,还有可能是磁盘坏道、病毒或某些异常原因导致的。
数据库损坏一般分为轻度损坏和严重损坏,轻度损坏可以通过 sql server自带的修复语句进行修复,严重损坏则是需要通过导库的方式,从数据库中将损坏账套的数据导入到一个新的账套中。下面将介绍轻度损坏的修复方式。
【解决方案】
1、先将所有客户端关闭,关闭后打开数据库,在数据库中将数据库设置为单用户模式,具体路径是选中有问题的数据库,右键-属性-选项-限制访问,将MULTI_USER改成SINGLE_USER。
2、修改后,执行语句dbcc checkdb('数据库名'),如dbcc checkdb('AIS201407281201391'),检测数据库损坏程度。看右下角的执行情况分析数据库损坏程度,损坏程度如下:
绿色:数据库没有损坏
黄色:数据库轻度损坏
红色:数据库严重损坏
3、检测后,如果是轻度损坏,则需要执行以下语句进行修复:
dbcc checkdb('数据库名','repair_allow_data_loss')
如:dbcc checkdb('AIS201407281201391','repair_allow_data_loss')
执行该语句后,拉到结果最下方,会有“发现N个分配错误和M个一致性错误”和“修复N个分配错误和M个一致性错误”的结果,如果错误全部修复完成,则数据库已进行了修复。如果仍有部分错误没有修复,则需要再执行修复语句,直至修复完成。
4、重新执行dbcc checkdb('数据库名'),如果结果为绿色,则已成功修复数据库。
5、修复完成后,将单用户模式重新修改回多用户模式,可在属性中进行修改,也可以执行以下语句进行修改:
alter database 数据库名 set multi_user
如:alter database AIS201407281201391 set multi_user
重新改为多用户模式后,重新打开软件。即可对账套正常进行使用。
【注意事项】
正式账套执行脚本前请先做好备份,建议待在测试账套中核实无误后再在正式账套中执行。