当我运行DBCC CHECKDB ,出现如下所示的错误消息:
表错误:对象ID 2020918271,索引ID 1,分区ID 72057594196590592,分配单元ID 72057594190233600(types行内数据),页面(4:129574),行0.logging检查(有效的UDT列)失败。 值是3和0。
现在我只是想了解这个错误是什么意思 ,它是多么严重 – 似乎是一些校验和相关的错误,可能不是那么严重。 最近的备份似乎也有同样的问题,但这不是什么大不了的,因为数据可以从其他来源重新创build。
无论如何,我试图深入到底,也许了解哪些行已损坏,如果有任何特定的模式。 当我运行DBCC PAGE查看那里有什么,如下面的语句:
DBCC PAGE('MyDB', 4, 129574, 3)
它什么也没有显示 纳达。 压缩。 只是标准:
DBCC执行完成。 如果DBCC打印错误消息,请联系您的系统pipe理员。
但没有错误,也没有页面数据。 事实上, CHECKTABLE出来的每一个错误都有一个文件/页面号,我从PAGE得到这个输出。
我也从CHECKTABLE输出中看到以下错误,但只是偶尔发现:
表错误:对象ID 2020918271,索引ID 1,分区ID 72057594196590592,分配单元ID 72057594190233600(types行内数据)。 页(4:129575)没有在扫描中看到,虽然其父(4:129977)和以前(4:129574)提到它。 检查以前的错误。
它看起来可能是相关的,但我真的不知道如何。 UDT可能相对较大(大约5 KB),因此可能会将页面拆分并丢失其中一个页面? 虽然这只是一个疯狂的猜测。
从CHECKTABLE出来的错误的数量也使得整个表看起来就像这样,但我知道情况并非如此,因为我可以很好地读取数据。 事实上,每天都有一个自动化的过程,随着时间的推移,这个过程会读取这个表中的所有数据,而且没有报告过一个错误。 另外,如果我在其中一个父页面上运行DBCC PAGE (即使“先前”页面不存在),我也可以获得键列,并且可以SELECT所有周围键的所有数据,而不会出现任何错误。
有人可以告诉我这是怎么回事? 当引用的页面不存在时, DBCC CHECKTABLE是否给了我这些错误是否合理? CHECKTABLE本身是否可能发出虚假错误?
你打开跟踪标志DBCC TRACEON(3604) ? 否则,DBCC PAGE输出只能转到错误日志。