"DBCC CHECKDB" 是一个SQL Server命令,用于检查数据库的完整性和一致性。它会扫描数据库的所有对象,包括表、索引、视图、存储过程等,以确保它们的物理结构和逻辑结构都正确无误。DBCC CHECKDB还会检测页面和行的错误、丢失的或重复的页引用、事务日志的错误以及许多其他潜在的问题。如果发现任何问题,它可能会修复一些问题,或者提供有关需要采取的纠正措施的信息。

DBCC CHECKDB(也称为数据库控制台命令 CHECKDB)用于检查 SQL Server 数据库或 Azure SQL 数据库中对象(如表、视图、聚簇、序列、索引和同义词)的物理和逻辑完整性。通常用于修复数据库损坏。当你运行 DBCC CHECKDB 时,实际上会执行以下修复选项:

    运行 DBCC CHECKALLOC:检查所选数据库的磁盘空间分配结构的一致性。 运行 DBCC CHECKTABLE:检查所有表和视图的完整性。 运行 DBCC CHECKCATALOG:检查所选数据库内的目录一致性。运行此命令的前提是数据库必须联机。 验证指定数据库中每个索引视图的内容。 当使用 FILESTREAM 将 varbinary(max) 数据保存到文件系统时,验证表元数据、文件系统目录和文件之间的链接级一致性。 验证数据库中的 Service Broker 数据。

因此,不需要单独运行 DBCC CHECKALLOC、DBCC CHECKTABLE 或 DBCC CHECKCATALOG。

如何在SQL Server中使用DBCC CHECKDB 修复数据库

当您想要修复 SQL 数据库中的腐败问题时,可以运行以下语法:

[ (数据库名称 | 数据库标识符 | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
) ]
[ WITH
{
[ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , { PHYSICAL_ONLY | DATA_PURITY } ]
[ , MAXDOP = 处理器数量 ]
}
]
]

这段文字是SQL语句的一部分,用于修复或检查数据库。翻译如下: [ ( 指定数据库的名称 | 数据库的ID | 0
[ , 不使用索引
| , { 允许数据丢失修复 | 快速修复 | 重建修复 } ]
) ]
[ 使用
{
[ 显示所有错误消息 ]
[ , 扩展逻辑检查 ]
[ , 不显示信息消息 ]
[ , 使用表锁 ]
[ , 只估计 ]
[ , { 物理检查仅 | 数据纯度检查 } ]
[ , 最大并行度 = 处理器数量 ]
}
]
] 请注意,这里的翻译可能需要根据具体的SQL环境和上下文进行调整。

您可能想知道:

数据库名称 | 数据库编号 | 0

要运行 DBCC CHECKDB 修复操作的数据库的名称或 ID。 如果未指定,或者指定了 0,则默认将命令应用于当前数据库。

不索引

指定不执行用户表的非聚簇索引的详细检查。这会减少总的执行时间。NOINDEX 对系统表没有影响,因为始终会对系统表索引执行完整性检查。

修复允许数据丢失 | 修复快速 | 修复重建

当你使用上述的修复选项之一时,你允许DBCC CHECKDB修复找到的错误。要了解这些修复选项之间的区别:

  • REPAIR_ALLOW_DATA_LOSS: 如果使用此修复选项,DBCC CHECKDB 将尝试修复发现的错误。如果操作成功,可能会导致数据丢失。
  • REPAIR_FAST: 此修复不会执行任何修复操作。相反,它仅用于保持向后兼容的语法。
  • REPAIR_BUILD: 如果选择此修复选项,将执行修复操作,但不会发生数据丢失。REPAIR_BUILD 包括两种类型的修复:快速修复和深度修复。
注意:
有关语法中其他项目的更多信息,可以参阅Microsoft.com上的相关文档。

然而,正如Microsoft所建议的,仅将REPAIR选项作为最后的手段。为什么呢?当DBCC CHECKDB报告错误时,建议的最佳选项是从最后一个已知的良好备份中恢复数据库。由于REPAIR_ALLOW_DATA_LOSS不能替代从备份中恢复,因此只有在没有备份可用时才建议使用。

如何在没有 CHECKDB REPAIR 选项的情况下修复数据库

当无法从备份中修复数据库时,REPAIR_ALLOW_DATA_LOSS 是否是唯一的选择?实际上,并非如此。如果 DBCC CHECKDB 报告所选数据库中的错误,您可以使用 SQL 数据库恢复软件——MS SQL Recovery 工具来修复损坏的数据库。您可以使用此软件进行以下操作:

修复SQL Server数据库:包括主要(.mdf)和次要(.ndf)文件
修复可能导致数据库错误的日志文件
修复损坏的SQL服务器数据库对象 - 表,触发器,索引,键,规则及存储过程
恢复已删除或丢弃的SQL数据库记录

修复数据库:

步骤 1: 选择要恢复的损坏数据库

    • 启动MS SQL恢复工具。 • 点击“浏览”(两个点)或“搜索”以选择损坏的数据库文件。 • 选择文件后,点击“修复”按钮开始分析过程。

注意:使用此软件前,您需要停止 SQL Server 服务。

第二步:修复损坏的数据库

  • 软件以树状结构显示所有可恢复的项目。这些项目会显示在左侧窗格中。
  • 选择要恢复的组件。在窗口中,点击“导出”按钮。
选择数据库对象

第三步:导出到数据库或脚本

    • 选择将数据库对象导出至数据库,或以脚本形式导出项目。 • 如果选择“导出至数据库”,请输入所需信息并选择目标数据库。
    • 会出现一个窗口,要求您提供连接到服务器的凭据和保存恢复项目的目的地。要开始修复过程,请单击“确定”。

注意:单击“确定”之前,需要重新启动 SQL Server 服务。

底线

在 SQL Server 中,用户通常选择使用 DBCC CHECKDB 命令来修复数据库。然而,这并不是唯一的选择。如果 DBCC CHECKDB 无法解决问题,或者你不想使用可能造成数据丢失的修复选项 —— REPAIR_ALLOW_DATA_LOSS,你可以使用 MS SQL Recovery 工具作为替代方案来修复你的数据库。