在应用程序日志中总是有这样的错误:事件类型: 错误
事件来源: MSSQLSERVER
事件种类: (2)
事件 ID: 17055
日期: 2006-8-30
事件: 10:15:04
用户: N/A
计算机: UYING-LXL5A1G17
描述:
17066: 
SQL Server 断言: 文件: <SpcAlloc.cpp>,行 = 466 
失败的断言 =“0”。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: aa 42 00 00 10 00 00 00   &ordf;B......
0008: 10 00 00 00 55 00 59 00   ....U.Y.
0010: 49 00 4e 00 47 00 2d 00   I.N.G.-.
0018: 4c 00 58 00 4c 00 35 00   L.X.L.5.
0020: 41 00 31 00 47 00 31 00   A.1.G.1.
0028: 37 00 00 00 0a 00 00 00   7.......
0030: 64 00 62 00 5f 00 6e 00   d.b._.n.
0038: 65 00 77 00 42 00 42 00   e.w.B.B.
0040: 53 00 00 00               S...    ===============================================================事件类型: 错误
事件来源: MSSQLSERVER
事件种类: (2)
事件 ID: 17055
日期: 2006-8-30
事件: 10:14:50
用户: N/A
计算机: UYING-LXL5A1G17
描述:
18052: 
错误: 3624,严重度: 20,状态: 1。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 84 46 00 00 10 00 00 00   &#132;F......
0008: 10 00 00 00 55 00 59 00   ....U.Y.
0010: 49 00 4e 00 47 00 2d 00   I.N.G.-.
0018: 4c 00 58 00 4c 00 35 00   L.X.L.5.
0020: 41 00 31 00 47 00 31 00   A.1.G.1.
0028: 37 00 00 00 0a 00 00 00   7.......
0030: 64 00 62 00 5f 00 6e 00   d.b._.n.
0038: 65 00 77 00 42 00 42 00   e.w.B.B.
0040: 53 00 00 00               S...    ==============================================================事件类型: 错误
事件来源: MSSQLSERVER
事件种类: (2)
事件 ID: 17052
日期: 2006-8-28
事件: 0:15:07
用户: N/A
计算机: UYING-LXL5A1G17
描述:
错误: 624,严重度: 20,状态: 2
未能从页中按 RID 检索行,因为所请求的 RID 比页中最后一个 RID 的数值还高。Rid pageid is (1:551805) and row num is 0xa。Page pointer = 0x68416000, PageId = (1:551805), flags = 0x8008, objectid = 2034106287, indexid = 0,DBID 10。有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 70 02 00 00 14 00 00 00   p.......
0008: 10 00 00 00 55 00 59 00   ....U.Y.
0010: 49 00 4e 00 47 00 2d 00   I.N.G.-.
0018: 4c 00 58 00 4c 00 35 00   L.X.L.5.
0020: 41 00 31 00 47 00 31 00   A.1.G.1.
0028: 37 00 00 00 0a 00 00 00   7.......
0030: 64 00 62 00 5f 00 6e 00   d.b._.n.
0038: 65 00 77 00 42 00 42 00   e.w.B.B.
0040: 53 00 00 00               S...    
=================================================================事件类型: 错误
事件来源: MSSQLSERVER
事件种类: (2)
事件 ID: 17052
日期: 2006-8-28
事件: 0:15:07
用户: N/A
计算机: UYING-LXL5A1G17
描述:
错误: 624,严重度: 20,状态: 2
Could not retrieve row from page by RID because the requested RID has a higher number than the last RID on the page. Rid pageid is (1:551805) and row num is 0xa.Page pointer = 0x68416000, PageId = (1:551805), flags = 0x8008, objectid = 2034106287, indexid = 0, DBID 10.有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 70 02 00 00 14 00 00 00   p.......
0008: 10 00 00 00 55 00 59 00   ....U.Y.
0010: 49 00 4e 00 47 00 2d 00   I.N.G.-.
0018: 4c 00 58 00 4c 00 35 00   L.X.L.5.
0020: 41 00 31 00 47 00 31 00   A.1.G.1.
0028: 37 00 00 00 0a 00 00 00   7.......
0030: 64 00 62 00 5f 00 6e 00   d.b._.n.
0038: 65 00 77 00 42 00 42 00   e.w.B.B.
0040: 53 00 00 00               S...    

解决方案 »

  1.   

    错误 624
    严重级别 21
    消息正文 
    未能从页中按 RID 检索行,因为所请求的 RID 比页中最后一个 RID 的数值还高。%1!。%2!、Dbid %3!。解释
    当试图通过指定行 ID (RID) 来从数据页检索行,因为所请求的 RID 数字比该页的最后一个 RID 大而失败时,发生该错误。如果损坏的非聚集索引的叶级页指向数据页上不正确的或不存在的 RID,则可能在普通处理中发生该错误。 如果当其他用户正在更新系统表(执行 DDL)时,在只读操作中在系统表上发生该错误,则它可能是暂时的 624 错误(而不是索引损坏)。若要确认无损坏,请执行不带修复子句的 DBCC CHECKTABLE。对策
    恢复过程视错误发生的时间而定。如果问题仍存在,则下列过程可能不足以清除索引损坏。在这种情况下,请与您的主要支持提供者联系。提供 DBCC CHECKTABLE(如果调查可能的系统表损坏)或 DBCC CHECKDB 的输出以便检查。
      

  2.   

    如果错误发生在普通处理过程中
    执行带有 REPAIR_REBUILD 子句的 DBCC CHECKTABLE。如果执行带有 REPAIR_REBUILD 子句的 DBCC CHECKTABLE 未更正该问题,则除去并重新创建受影响的索引。重要  如果执行带有 REPAIR_REBUILD 子句的 DBCC CHECKDB 未更正索引问题,或不确定带有 REPAIR_REBUILD 子句的 DBCC CHECKDB 对数据有何影响,则请与您的主要支持提供者联系。
    索引未知、查询已知
    解决该问题的最快方法是执行带有 REPAIR_REBUILD 子句的 DBCC CHECKDB。本操作修复整个数据库中的所有索引损坏。如果数据库太大因而不想运行 DBCC CHECKDB,则使用下列说明以找到要除去并重新创建的特定索引。如果不知道哪个索引导致了问题但知道哪个查询遇到了问题,请遵照下列说明操作。如果索引或查询均未知,请遵照下一节"索引和查询均未知"中的说明操作。 通过读取遇到错误的查询的显示计划输出来确定应除去哪个索引。如果设置 SET SHOWPLAN_TEXT 为 ON、SET NOEXEC 为 ON,然后运行该查询,则输出指出查询使用哪个非聚集索引访问该表。 
    例如:USE pubs
    GO
    SET SHOWPLAN_TEXT ON
    GO
    SET NOEXEC ON
    GO
    SELECT title 
    FROM titles 
    WHERE title > 'Cooking'
    GO下面是结果集:StmtText         
    ---------------- 
    SET NOEXEC ON(1 row(s) affected)StmtText                                                
    ------------------------------------------------------- 
    SELECT title 
    FROM titles 
    WHERE title > 'Cooking'(1 row(s) affected)StmtText                                                              
    --------------------------------------------------------------------- 
      |--Index Seek(OBJECT:([pubs].[dbo].[titles].[titleind]), SEEK:([titles].[title] > [@1]) ORDERED FORWARD)(1 row(s) affected)再次设置 SET NOEXEC 为 OFF、SET SHOWPLAN_TEXT 为 OFF: 
    SET NOEXEC OFF
    GO
    SET SHOWPLAN_TEXT OFF
    GO除去并重新创建步骤 1 中标识的索引(本例中为 titleind)。 
    索引和查询均未知
    如果索引和查询均未知,则重建表中的所有非聚集索引,如下所示: 当获得表名时查看使用 DBCC CHECKDB 创建的输出: 
    如果对象 ID 小于 100,则无法除去可重新创建索引。请不要继续步骤 2 或 3。必须从某个已知的清洁备份还原数据库。
    如果对象 ID 为 100 或更大,则继续进行步骤 2。 
    使用 sp_helpindex 列出表中的所有索引,然后使用下列方法之一重建所有非聚集索引: 
    除去并重新创建表中的每个非聚集索引。
    如果表具有聚集索引,则除去并重新创建该索引。这使得所有非聚集索引自动重建。如果您的表较大,则可能没有进行此操作的空间。通常,可用的空间必须为表大小的 1.2 倍。 
    在重新创建了适当的索引之后,在表上运行 DBCC CHECKTABLE 以确认问题已解决。