是的我知道最好的选择是恢复未损坏的数据库。
但是... 以下消息是否表示未使用的页面中存在数据损坏?
表错误:对象ID 0,索引ID -1,分区ID 0,分配单元ID -8573858375060684800(类型未知),页面(0:13887752)。测试(IS_OFF(BUF_IOERR,pBUF-> bstat))失败。值为12716041和-14。
我有大约200个错误,如上所述。
答案 0 :(得分:1)
是的,您的数据库已损坏。您粘贴的错误表明,这种损坏可能是由于I / O子系统造成的。
在此之前你需要了解什么是校验和..
启用校验和时,SQLServer会在写入磁盘并写入其页眉之前计算页面的校验和。
当再次读取页面时,它会计算校验和,如果此校验和与上次计算的CheckSum不匹配,则SQL将抛出错误
运行CHKDSK,看看I / O子系统是否与DBCC活动一样好
同一问题已被重新审核here
根据评论更新:
Paul Randal解释了Objectid Zero:Finding a table name from a page ID
如果您看到ObjectId为0,则表示找不到元数据。这可能是因为:
由于记录了页面损坏,因此页面所属的表已被删除 系统目录在某种程度上是腐败的 页面已损坏,因此使用不正确的值来查找元数据
答案 1 :(得分:0)
这种模式意味着 DBCC 无法确定页面属于哪个对象。
<块引用>表错误:对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID -8573858375060684800(未知类型),页面(0:13887752)。测试 (IS_OFF (BUF_IOERR, pBUF->bstat)) 失败。值为 12716041 和 -14。
SQL Server 有一种方法可以让数据文件页成为所谓的受保护的磁盘。这实际上是一个真正的用词不当,因为它的真正含义是它允许 SQL Server 检测页面何时损坏。这只是 SQL Server 能够判断 I/O 子系统已损坏页面的一种方式。您可以打开页面保护选项或使用 ALTER DATABASE SET PAGE_VERIFY<option>
更改您拥有的选项,您可以使用三种不同的选项:
参考:https://www.stellarinfo.com/blog/detect-page-level-corruption-automatically/