今天接到一朋友电话说用友T6系统有问题,在远程检查了以后,排除T6系统本身的错误,怀疑是SQL2000的数据库有错误,拿到SQL2000的数据库备份,对数据进行恢复并检查,步骤如下:

      1、用DBCC CHECKDB('dataname')进行检查,发现有很多错误信息:

084432361.jpg

084435362.jpg

       在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)

                       上述两个命令在某些情况下可能需要重复执行

       如果在执行的过程中提示【未处理修复语句。数据库需要处于单用户模式下。】

       090919124.jpg

       可以用下列命令将数据库置为【单用户模式】

       use master 
       exec sp_dboption 'UFDATA_003_2013', N'single', N'true' --将目标数据库置为单用户状态 

       或者直接修改数据库属性:

       091423800.jpg

      4、重新检查数据库,根据提示再检查表或索引等,在CHECK的过程中,不排除允许丢失部分数据。

     5、最后DBCC CHECKDB(dataname)看看有没有错误提示,如果没有错误提示表明已经修复完成。修复完成之后要记得把数据库恢复成多用户模式。

      use master 
      exec sp_dboption 'UFDATA_003_2013', N'single', N'false'