近段时间经常收到客户的求助电话,说他们的SQLSERVER业务数据库置疑了,因为系统不能使用,所以他们也不能加油正常营业
(我们是做加油站IC卡管理系统的)因为我们的系统损坏的话,加油站也不能加油,然后我们使用DBCC CHECKDB命令帮客户修复
数据库,客户的数据库一共置疑了两次
我们怀疑是不是他们的硬盘有问题,但是因为计算机是我们配给客户的是DELL商用机(2011年购买的),按道理质量应该不错的。
后来得知是他们油站停过电。我们大概知道置疑的原因了。
我们推测的原因:
停电之前有加油数据要插入数据库,因为SQLSERVER我们都是使用默认设置,什么都没有改,就是说数据插入数据库的时候事务还没有提交,
SQLSERVER尝试回滚事务,但是计算机已经关机了,当计算机关机的时候回滚操作会被中断。但是这个回滚动作在下次计算机开机的时候
(即SQLSERVER重启的时候)回滚动作重新开始,由于SQLSERVER做每一个事务都是先写日志,再写入硬盘。
有可能由于内存中的数据丢失或者某些原因造成数据库不能回滚操作,那么整个数据库就置疑了
使用DBCC CHECKDB命令帮客户修复数据库
我们当时使用下面的sql脚本修复的
--修复数据库DBCC
ALTER DATABASE test SET EMERGENCY
ALTER DATABASE test SET SINGLE_USER
DBCC CHECKDB(test,REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE test SET MULTI_USER
ALTER DATABASE test SET ONLINE
--如果检测到某个表读取不了数据还可以check一下表
USE test
DBCC CHECKTABLE(nihao)
来源:51CTO
作者:sunboy_zzc
链接:https://blog.51cto.com/1546594/2121078