我被要求查看一个报告“破损页面”错误的 SQL 2005 数据库。
我可以查找 MsgID 等,但我只需要一些指针来从更一般的意义上解释 DBCC CHECKDB 输出。
在此示例中:
消息 8909,第 16 层,状态 1,第 1 行 表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 8795506764168298496(未知类型),页 ID (1:106887) 在其页眉中包含不正确的页 ID。页眉中的 PageId = (1041:-523272204)。 消息 8939,第 16 层,状态 98,第 1 行 表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 8971733407675449344(未知类型),页面 (0:0)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 62916617 和 -4。 CHECKDB 发现 0 个分配错误和 37 个与任何单个对象无关的一致性错误。
...显然错误与任何单个对象无关(请注意 ObjectID 和 IndexID 没有正确的值)。这到底是什么意思?如果它不是单个对象,那么它是什么?
在此示例中:
消息 8939,第 16 层,状态 98,第 1 行 表错误:对象 ID 69575286,索引 ID 1,分区 ID 286034662653952,分配单元 ID 286034662653952(行内数据类型),页面 (1:207727)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 62916617 和 -1。 消息 8964,第 16 层,状态 1,第 1 行 表错误:对象 ID 69575286,索引 ID 1,分区 ID 286034662653952,分配单元 ID 71780678747160576(类型 LOB 数据)。未引用页面 (1:443)、插槽 26、文本 ID 1509706039296 处的行外数据节点。
...它是指包含数据的页面,还是包含索引的页面?它提到了行外数据,但也给出了索引 ID。索引 ID 值 0 和 1 表示什么?
顺便说一句,这是为了帮助慈善机构,因此非常感谢任何帮助。谢谢。
PS:我还没到现场,只是查看他们发给我的dbcc日志,所以我还不能做任何修补。
编辑:它的 SQL 2005 v 9.0.3042
编辑:假设您知道,恢复备份可能不是一种选择,因为损坏的页面已经在数据库中保存了几个月,因为第三方在服务器切换后没有将维护计划放回原处,或者一些这样的场景。因此假设调查错误并尝试修复它们或隔离它们是唯一的行动方案。