SQL2000数据库修复实例
今天接到一朋友电话说用友T6系统有问题,在远程检查了以后,排除T6系统本身的错误,怀疑是SQL2000的数据库有错误,拿到SQL2000的数据库备份,对数据进行恢复并检查,步骤如下:
1、用DBCC CHECKDB('dataname')进行检查,发现有很多错误信息:
在sysObjects中查找ID=2的记录,发现是sysindexes,从表面上看是sysindexes出现了问题,实际是应该是数据库中表对象的索引出现了混乱。
2、确定是哪些表的索引出现问题
用SELECT object_name(object_id)命令可以知道具体表名。
如第一行的object_id=1804741682,得到的表名是:VoucherTemplates
3、对出现错误的表进行修复
对表重建索引:DBCC DBREINDEX(表名,[参数])
对表检查数据:DBCC CHECKTABLE(表名,[参数]) [WITH (参数)]
(DBCC DBREINDEX、DBCC CHECKTABLE命令的详细解释与使用方法参考联机手册)
如上述:DBCC DBREINDEX('VoucherTemplates')
DBCC CHECKTABLE('VoucherTemplates',REPAIR_ALLOW_DATA_LOSS)
上述两个命令在某些情况下可能需要重复执行
如果在执行的过程中提示【未处理修复语句。数据库需要处于单用户模式下。】
可以用下列命令将数据库置为【单用户模式】
use master
exec sp_dboption 'UFDATA_003_2013', N'single', N'true' --将目标数据库置为单用户状态
或者直接修改数据库属性:
4、重新检查数据库,根据提示再检查表或索引等,在CHECK的过程中,不排除允许丢失部分数据。
5、最后DBCC CHECKDB(dataname)看看有没有错误提示,如果没有错误提示表明已经修复完成。修复完成之后要记得把数据库恢复成多用户模式。
use master
exec sp_dboption 'UFDATA_003_2013', N'single', N'false'
转载于:https://blog.51cto.com/hdf007/1281223