SQL Server 报错8909(Object ID 0, index ID -1, partition ID 0)
我们经常用到DBCC CHECKDB来查看有关数据库的错误问题,报错如下:
Msg 8909, Level 16, State 1, Line 2 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 72057594045726720 (type Unknown), page ID (16:1330467) contains an incorrect page ID in its page header. The PageId in the page header = (48:93722876).
具体来说,让人迷惑的部分是“Object ID 0, index ID -1, partition ID 0”。系统中没有对象ID为0,索引怎么会有-1的ID呢?
这种模式意味着 DBCC 无法确定页面属于哪个对象。
SQL Server 2005 重写 DBCC CHECKDB 时新增了一种数据结构,称为 DbccCombinedID,它封装了标识页面所属位置的所有相关 ID。对象、索引和分区 ID 的默认值分别为 0、-1 和 0。当 DBCC CHECKDB 读取页面时,根据页头中的 m_objId 和 m_indexId 字段计算分配单元 ID(计算方式见),然后 DBCC CHECKDB 进行所有元数据查找以找出其他 ID .如果页眉损坏,导致计算出的分配单元 ID 无效,则无法填充其他 ID,也无法找到页面的“所有者”。可能还会有其他错误消息引用损坏的页面。
所以要怎么做?按照处理损坏的常用方法。