DBCC CHECKDB 错误

mbb*_*bbp 5 sql-server corruption dbcc-checkdb

我的 SQL Server 数据库有一些问题。当我运行这个:

select  * from dbo.Entity
where Oid='191FAF30-4729-4145-8106-60E34A8E164C'
Run Code Online (Sandbox Code Playgroud)

...它吐出以下错误。

消息 823,级别 24,状态 2,第 2 行 在读取文件“D:\Database\db.mdf”中偏移量 0x00000021442000 的过程中,操作系统向 SQL Server 返回错误 1(函数不正确。)。
SQL Server 错误日志和系统事件日志中的其他消息可能会提供更多详细信息。这是一种严重的系统级错误情况,会威胁数据库的完整性,必须立即纠正。
完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素引起;有关详细信息,请参阅 SQL Server 联机丛书。

事件日志错误与上述相同。

所以我跑了一个DBCC CHECKDB,它吐出以下错误:

CHECKDB 在数据库中发现 0 个分配错误和 0 个一致性错误
当前命令发生严重错误。结果,如果有的话,应该被丢弃。

我试过

dbcc checktable ('Entity')
Run Code Online (Sandbox Code Playgroud)

但消息是:

Msg 0, Level 11, State 0, Line 0
当前命令发生严重错误。
结果,如果有的话,应该被丢弃。

版本信息:

Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 
Feb 10 2012 19:39:15 
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Run Code Online (Sandbox Code Playgroud)

任何有关如何修复损坏的表的建议将不胜感激!

sta*_*ray 1

当 IO 请求期间遇到操作系统错误时,将报告为 823 错误。仅针对失败的操作系统 IO 操作错误报告 823 错误消息。鉴于此,您需要检查系统事件日志中是否有任何与磁盘或文件系统相关的条目。您将需要修复磁盘或文件系统问题,否则损坏将会再次出现。

\n\n
Msg 0, Level 11, State 0, Line 0\nA severe error occurred on the current command.\nThe results, if any, should be discarded.\n
Run Code Online (Sandbox Code Playgroud)\n\n

当元数据损坏或不一致时,通常会引发此错误。

\n\n

\xe2\x80\xa2 实际错误是:\n数据库 %d 的元数据不一致。\n此错误无法修复并阻止进一步的 DBCC 处理。请从备份恢复

\n\n

\xe2\x80\xa2 元数据不一致错误在大多数情况下是无法修复的\n在尝试修复损坏或恢复数据之前,请将 mdf 和 ldf 文件复制到安全位置。这样,如果您的恢复尝试进一步损坏数据库,您至少可以始终返回到当前状态。

\n\n

您有几个选项可以尝试:\n1. 从备份恢复。\n2. 手动提取尽可能多的数据,创建新表,将数据导入新表,删除损坏的表,将新表重命名为损坏的表名称。\n3. 运行 DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS。<--这可能行不通\n4. 购买昂贵的第三方应用程序来恢复数据。

\n\n

只要您没有备份损坏的数据库,就只能保证从备份进行恢复。

\n