2

我被要求查看一个报告“破损页面”错误的 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

编辑:假设您知道,恢复备份可能不是一种选择,因为损坏的页面已经在数据库中保存了几个月,因为第三方在服务器切换后没有将维护计划放回原处,或者一些这样的场景。因此假设调查错误并尝试修复它们或隔离它们是唯一的行动方案。

4

2 回答 2

1

保罗兰德尔几乎有你需要的每一个答案。

但是,在实践中,您应该已经在考虑“恢复”...

于 2009-08-27T18:27:59.500 回答
1

我从这里的经验说...

出现错误意味着您的数据库已损坏。

我将恢复您拥有的没有此错误的最新备份,然后使用它。

您可以运行 DBCC 来修复损坏,但您很有可能会丢失数据。我不建议这样做,因为“恢复/修复”可能看起来有效,但没有。

于 2009-08-27T18:28:45.007 回答