+ -
当前位置:首页 → 问答吧 → 为什么会出现一致性错误?怎么彻底解决?在线等。。。。。。。。。。。。

为什么会出现一致性错误?怎么彻底解决?在线等。。。。。。。。。。。。

时间:2011-11-29

来源:互联网

我经常碰到,快要崩溃了!有时候可以用
SQL code

DBCC CHECKTABLE ('dbo.misstock_bak',REPAIR_FAST)



但有时候必须用
SQL code

ALTER DATABASE mydb
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;

DBCC CHECKTABLE ('dbo.misstock_bak',REPAIR_allow_data_loss)

ALTER DATABASE mydb
SET MULTI_USER;



这是为什么?有人说这是索引问题,但是我删除了所有索引还是有错误,只能运行上述代码(第二段,REPAIR_allow_data_loss)


-------------------------

错误记录如下,请各位大神帮忙解释下为何老是出现呢?在线等。。。。。。。。。。。。

正在回滚不合法事务。估计回滚已完成: 100%。
misStock_bak的 DBCC 结果。
修复: 页 (1:45103) 已从对象 ID 77243330,索引 ID 0,分区 ID 72057594040156160,分配单元 ID 5062218874880 (类型为 In-row data)释放。
Msg 8928, Level 16, State 1, Line 6
对象 ID 77243330,索引 ID 0,分区 ID 72057594040156160,分配单元 ID 5062218874880 (类型为 In-row data): 无法处理页 (1:45103)。有关详细信息,请参阅其他错误消息。
  该错误已修复。
Msg 8944, Level 16, State 18, Line 6
表错误: 对象 ID 77243330,索引 ID 0,分区 ID 72057594040156160,分配单元 ID 286537195585536 (类型为 In-row data),页 (1:45103),行 8。测试(columnOffsets->offTbl [varColumnNumber] >= priorOffset)失败。值为 0 和 126。
  该错误已修复。
Msg 8944, Level 16, State 18, Line 6
表错误: 对象 ID 77243330,索引 ID 0,分区 ID 72057594040156160,分配单元 ID 286537195585536 (类型为 In-row data),页 (1:45103),行 8。测试(columnOffsets->offTbl [varColumnNumber] >= priorOffset)失败。值为 0 和 126。
  该错误已修复。
对象 'misStock_bak' 的 23387 页中有 718123 行。
CHECKTABLE 在表 'misStock_bak' (对象 ID 77243330)中发现 0 个分配错误和 3 个一致性错误。
CHECKTABLE 在表 'misStock_bak' (对象 ID 77243330)中修复了 0 个分配错误和 3 个一致性错误。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

作者: exkaede   发布时间: 2011-11-29

REPAIR_ALLOW_DATA_LOSS--這都修復不了

這表能不能打開?

建議重建這個表

作者: roy_88   发布时间: 2011-11-29

看看以下内容是否有用?

用语句修复:检测到基于一致性的逻辑 I/O 错误
use master  
declare @databasename varchar(255)  
set @databasename='需要修复的数据库实体的名称'  
exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态  
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)  
dbcc checkdb(@databasename,REPAIR_REBUILD)  
exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态

作者: dawugui   发布时间: 2011-11-29

引用 1 楼 roy_88 的回复:

REPAIR_ALLOW_DATA_LOSS--這都修復不了

這表能不能打開?

建議重建這個表


我说的是REPAIR_ALLOW_DATA_LOSS有用,fast没用,但是我怕我丢失数据(但我不清楚现在是否已经有数据丢失了)

作者: exkaede   发布时间: 2011-11-29

引用 3 楼 exkaede 的回复:

引用 1 楼 roy_88 的回复:

REPAIR_ALLOW_DATA_LOSS--這都修復不了

這表能不能打開?

建議重建這個表


我说的是REPAIR_ALLOW_DATA_LOSS有用,fast没用,但是我怕我丢失数据(但我不清楚现在是否已经有数据丢失了)


是可能會造成某些資料的遺失。這是不一定的,只有通過查看數據的記錄數

作者: roy_88   发布时间: 2011-11-29

如用DBCC CHECKTABLE无法修复misStock_bak表的话,先将该表的数据导出,再重建表,
如无法删除表,那就要新建一个数据库,将所有对象及能导的数据导过去,重命名数据库...

作者: jyh070207   发布时间: 2011-11-29

如经常碰到,先检测磁盘及存储系统有没有问题,没有问题,最好是将重新建一个数据库,重新生成所有对象,再导数据过去。。。

作者: jyh070207   发布时间: 2011-11-29

表损坏了吧

作者: szstephenzhou   发布时间: 2011-11-29

热门下载

更多