首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库出现“提取逻辑页失败”

Posted on 2009-05-23 23:39  停留的风  阅读(13199)  评论(0编辑  收藏  举报

出现怪异现象,一张表只能查询,不能写入、更新。查看应用程序,发现原来数据逻辑页出现问题。具体的错误日志如下:

事件类型:    错误
事件来源:    MSSQLSERVER
事件种类:    (2)
事件 ID:    605
日期:        2009-5-23
事件:        17:04:24
用户:        N/A
计算机:    BMCSQ2
描述:
尝试在数据库 11 中提取逻辑页 (1:2025336) 失败。该逻辑页属于分配单元 72057594055098368,而非 72057594057457664。

有关

更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

 

解决方案:

首先,找到出问题的数据表,运行以下查询,确定与消息中指定的分配单元相关联的表。用错误消息中说明的分配单元替换 allocation_unit_id

USE dbName;
GO
SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,
au.type_desc AS allocation_type, au.data_pages, partition_number
FROM sys.allocation_units AS au
JOIN sys.partitions AS p ON au.container_id = p.partition_id
JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id
WHERE au.allocation_unit_id = 72057594055098368 OR au.allocation_unit_id = 72057594055098368
ORDER BY au.allocation_unit_id;
GO

 

具体的可参照微软官方:http://msdn.microsoft.com/zh-cn/library/aa337419.aspx

 

接着,将之前的表重建,存储过程、触发器、索引都要建的,然后再导入数据。这个导入数据比较简单,直接,

insert into new(field1,field2,field3select field1,field2,field3 from old

 

尽管这样处理之后,恢复正常使用,但是应用程序依然爆出这个bug.也没有找到更好的解决方案,如果有哪位高手知道解决方案,请留言,谢谢

 

下面是检查数据库、数据表的结果

 

DBCC CHECK

消息 
8967,级别 16,状态 218,第 1 行
DBCC 中出现内部错误,无法继续处理。请与客户支持服务部门联系。
消息 
7985,级别 16,状态 2,第 1 行
系统表预检查: 对象 ID 
4。无法使用闩锁类型 SH 读取并闩锁页 (1:1880513)。由于不可修复的错误,CHECK 语句已终止。
dbName的 
DBCC 结果。
消息 
8944,级别 16,状态 12,第 1 行
表错误: 对象 ID 
0,索引 ID -1,分区 ID 0,分配单元 ID 262144 (类型为 Unknown),页 (1:1880513),行 56。测试

(ColumnOffsets 
<= (nextRec - pRec))失败。值为 34 和 17
CHECKDB 发现有 
0 个分配错误和 1 个一致性错误与任何单个的对象都没有关联。
CHECKDB 在数据库 
'dbName' 中发现 0 个分配错误和 1 个一致性错误。
对于由 
DBCC CHECKDB (dbName)发现的错误,repair_allow_data_loss 是最低的修复级别。

 

 

 

USE dbName;
GO
DBCC CHECKTABLE ("dbo.T_TLMail_Receiver");
GO

消息 
8967,级别 16,状态 218,第 1 行
DBCC 中出现内部错误,无法继续处理。请与客户支持服务部门联系。
消息 
8944,级别 16,状态 12,第 1 行
表错误: 对象 ID 
0,索引 ID -1,分区 ID 0,分配单元 ID 262144 (类型为 Unknown),页 (1:1880513),行 56。测试

(ColumnOffsets 
<= (nextRec - pRec))失败。值为 34 和 17
消息 
7985,级别 16,状态 2,第 1 行
系统表预检查: 对象 ID 
4。无法使用闩锁类型 SH 读取并闩锁页 (1:1880513)。由于不可修复的错误,CHECK 语句已终止。

 

 

http://msdn.microsoft.com/zh-cn/library/ms174338.aspx