执行如下语句:
use master
goALTER DATABASE database_name SET SINGLE_USER
DBCC CHECKDB ('database_name' ,REPAIR_ALLOW_DATA_LOSS )ALTER DATABASE database_name SET MULTI_USER        
执行了几个小时没执行完,点取消执行后得到如下报错:
由于数据移动,未能继续以 NOLOCK 方式扫描。
请教高手该如何解决?

解决方案 »

  1.   

    先用 DBCC CHECKDB WITH NO_INFOMSGS 检查看看是不是数据库有错误可能是你的数据库错误较多,所以花费了很多时间在修复中这个时候你取消了,那么可能有一部分数据在修复的过程中需要回滚,或者回滚的时候丢失了,所以报错
      

  2.   

    执行结果:
    CHECKDB 发现了 48 个分配错误和 371 个一致性错误。还有好多类似这样的提示:
    服务器: 消息 8909,级别 16,状态 1,行 1
    表错误: 对象 ID 0,索引 ID 0,页 ID (1:127112)。页首结构中的 PageId = (0:0)。
    服务器: 消息 8905,级别 16,状态 1,行 1
    扩展盘区 (1:133424)(属于数据库 ID 7)在 GAM 中标记为已分配,但没有 SGAM 或 IAM 分配过该盘区。这样的错误是否可以修复?
      

  3.   

    不知道能否修复,试试重建一个库,将没有错误的资料转过去,以后用新数据库因为即使用 DBCC CHECKDB ('database_name' ,REPAIR_ALLOW_DATA_LOSS ) 修复一样可能丢失数据,而且效果也不一定好
      

  4.   

    晕死,搞了好久还是没搞定。。
    其它的都已经好了,就是存储过程不知道怎么从原来库的导入新库,我用生成sql脚本的方式导出所有的存储过程,但因为大部分的存储过程是加密的,所以导出一堆这样的脚本:
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO/****** Encrypted object is not transferable, and script can not be generated. ******/GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO有没有什么好的方法可以把所有的存储过程(含加密)导入新库的?