最近遇到一个严重错误
Error: 605, Severity: 21, State: 3.
Attempt to fetch logical page (1:xxxxx) in database 2 failed. It belongs to allocation unit xxxxxnot to xxxxx
.严重级别 21, 看起来非常吓人,根据联机帮助对该错误的描述说明
http://technet.microsoft.com/zh-cn/library/aa337419.aspx
此错误通常表示指定数据库中的页或分配已损坏。 SQL Server 在访问页链接或使用索引分配映射 (IAM) 读取属于某个表的页时,检测到此损坏。分配给某个表的所有页必须属于与该表相关联的分配单元中的一个。如果页眉中包含的分配单元 ID 与该表相关联的分配单元 ID 不匹配,将引发此异常。 错误消息中列出的第一个分配单元 ID 是页眉中显示的 ID,而第二个分配单元值则是与表相关联的 ID。
数据损坏错误
严重级别为 21 表示可能存在数据损坏。 可能的原因包括损坏的页链、损坏的 IAM 或该对象的 sys.objects目录视图中存在无效条目。 这些错误通常由硬件或磁盘设备驱动程序故障而引起。
-----------------------------------------------------------------------------------
郁闷的是,服务器的工作看起来是好的,虽然出错的时候连续了一堆,但是受影响的程序似乎就只有一个,而且遍寻系统也没有发现其他异常。
一边申请IT的同胞深入检查硬件,另一边遍寻该错误相关的信息
由于故障只出在tempdb(错误信息中有 in database 2),然后发现了这个
http://support.microsoft.com/kb/960770/zh-cn
文章编号:960770 - 最后修改: 2009年1月23日 - 修订: 2.1
这篇文章中的信息适用于:
Microsoft SQL Server 2008Standard
Microsoft SQL Server 2008Developer
Microsoft SQL Server 2008Enterprise
Microsoft SQL Server 2008Workgroup
Microsoft SQL Server 2008Web
我用的是 SQL 2008 R2, 这个文章也很古老了,怎么想也觉得这个问题应该已经修复了,但最终的结果令我很郁闷,按照这个文章中提到的,将临时表的定义改掉后,问题不再出现。
(简单测试了一下,这个问题无法简单重现,所以也不好确定其他版本是否存在)