文件修复

DBCC CHECKDB与no_infosgs

简介:定期运行DBCC CHECKDB对于确保SQL Server数据库中没有损坏问题非常重要。但是,CHECKDB命令可能对性能有影响。这篇文章讨论了使用DBCC CHECKDB和NO_INFOMSGS以及其他参数来最小化对SQL Server的性能影响。如果DBCC CHECKDB失败,请考虑使用Stellar Repair for MS SQL软件来恢复数据库,以避免与排除CHECKDB失败相关的进一步停机时间。

免费下载

作为SQL数据库管理员,您知道使用它有多重要DBCC CHECDKB检查数据库的物理和逻辑完整性。但是,有些人可能会对定期执行DBCC CHECKDB命令犹豫不决,因为它会影响SQL Server的性能。但是,将该命令作为每日、每周或每月数据库例程的一部分运行,以便尽早检测数据库损坏,这一点至关重要。

但是,您可以使用正确的参数(如NO_INFOMSGS等)将DBCC CHECKDB命令引起的中断最小化。

使用DBCC CHECKDB与no_infosgs

DBCC CHECKDB转储一页又一页无关紧要的结果。例如,对测试数据库执行命令将返回数千行输出,如下图所示:

DBCC checkdb命令

您可能会在数千行代码中错过一个关键的错误消息。但是,您可以避免所有不相关的输出,并且只通过使用no_infosgs执行DBCC CHECKDB来查看错误。语法如下:

DBCC CHECKDB(Stellar_TestDB)与no_infosgs;
命令输出如下所示:
DBCC checkdb with noinfosgs 2

正如您在这个图像中看到的,运行带有NO_INFOMSGS选项的CHECKDB命令只显示有问题的部分,即命令发现的一致性错误。现在可以继续修复错误了。看看一篇关于建议的文章如何修复DBCC CHECKDB一致性错误

实际上,在SQL Server Management Studio (SSMS)中对小型数据库执行完整性检查时,使用CHECKDB和NO_INFOMSGS可以大大缩短处理时间。

请注意,使用NO_INFOMSGS并不能最小化性能问题,但由于只显示错误,可能会阻止您再次运行完整性检查。此外,对于小型数据库使用此选项。对于较大的数据库(1tb或更多),请考虑使用其他*选项。

*除了NO_INFOMSGS,您还可以使用DBCC CHECKDB与以下参数:

DATA_PURITY

使用此选项检查列中的数据完整性,特别是对于从以前版本的SQL Server升级的数据库。

注意:DBCC CHECKDB默认执行列值完整性检查。对于升级的数据库,您需要使用DATA_PURITY选项。

使用如下命令运行带DATA_PURITY选项的DBCC CHECKDB:

DBCC CHECKDB(starar_testdb)

EXTENDED_LOGICAL_CHECKS

这使得DBCC CHECKDB对索引视图、空间索引或XML索引执行逻辑检查。语法如下:

DBCC CHECKDB(Stellar_TestDB)与EXTENDED_LOGICAL_CHECKS

注意:Microsoft建议仅在您怀疑已损坏或遇到损坏错误的数据库上执行EXTENDED_LOGICAL_CHECKS。但是,如果运行的是关键任务数据库,则必须使用该选项来检查XML索引和空间索引。

在SQL Server 2016中,运行带有EXTENDED_LOGICAL_CHECKS选项的DBCC CHECKDB命令可能会在具有“过滤的非聚集索引(NCI)超过聚集的columnstore索引(CCI)”的表上失败。此外,它还会导致SQL错误5297。查找有关此SQL错误的更多信息在这里

PHYSICAL_ONLY

使用“PHYSICAL_ONLY”选项可以减少DBCC CHECKDB的开销,并使其在大型数据库中运行得更快。CHECKDB跳过所有的逻辑检查,并将检查限制在页面的物理结构上。它还有助于对可能导致数据损坏的故障、撕裂的页面和常见硬件故障进行页面校验和。要使用DBCC CHECKDB和PHYSICAL_ONLY,使用以下语法:

DBCC CHECKDB(starar_testdb)

优化DBCC CHECKDB使用的其他最佳实践

1.使用跟踪标志2562和2549

Microsoft建议在使用PHYSICAL_ONLY选项执行DBCC CHECKDB命令时,使用2562和2549跟踪标志来改善磁盘I/O资源的使用。

  • 跟踪标志2562:它通过将命令作为单个批处理运行来优化DBCC CHCKDB性能。此外,它还有助于确定要从数据库中读取的页面。然而,与此跟踪标志相关的一个问题是,它可能会增加tempdb的利用率(即数据库大小的5%)。
  • 跟踪标志2549使用此跟踪标志有助于提高DBCC CHECKDB命令的性能。它通过假设每个数据库文件驻留在唯一的底层磁盘上来实现这一点。对于具有多个数据文件的数据库,不要使用此跟踪标志。

参考这个链接以查找有关这些跟踪标志的更多详细信息。

2.优化下边

DBCC CHECKDB会大量使用临时数据库(TempDB)。为了正确地利用它,将TempDB放在一个快速I/O子系统上。实际上,将TempDB数据库放在它自己的一组快速磁盘或轴上。

3.降低CPU使用率

如果您可以运行DBCC CHECKDB更长时间以限制CPU使用,请尝试通过以下实践来减少并行性:

  • 通过使用跟踪标志2528关闭DBCC CHECKDB(及其命令CHECKFILEGROUP和CHECKTABLE)的并行性。
  • 使用SQL Server最大并行度选项,以限制用于并行查询的处理器数量。

常见问题

问:DBCC CHECKDB作业一次又一次失败?我应该怎么做才能恢复我的数据库?

a .试图找到腐败的根本原因,这可能是硬件故障。如果没有,请使用SQL恢复工具,例如用于MS SQL的Stellar Repair,将数据库恢复到原始形式。该工具修复用于恢复数据库的损坏的数据库MDF文件。

Q.我的数据库损坏了,一个用户建议运行带有REPAIR_ALLOW_DATA_LOSS选项的DBCC CHECKDB来修复数据库。但是我需要知道在哪种情况下我应该使用修复选项?

答:微软建议运行DBCC CHECKDB ' REPAIR_ALLOW_DATA_LOSS '作为最后的手段。若要修复损坏错误,应首先从备份进行恢复。但是,如果你没有有效的备份,修复数据库是你唯一的选择,使用Stellar Repair for MS SQL软件来修复损坏的数据库,而不会丢失任何数据。

问:我怎样才能相信该软件会帮助我从损坏的SQL数据库中恢复所有对象?

答:从恒星*的SQL恢复工具是可用的演示版本,允许用户修复损坏的SQL数据库文件(MDF/NDF)。一旦修复,软件会显示所有可恢复对象的预览。在预览版中验证可恢复数据的完整性后,您可以通过激活许可版本的软件保存数据。

进步
80% 很多人觉得这篇文章很有帮助

为什么恒星®是全球领导者

为什么选择Stellar?
  • 0+

    客户

  • 0+

    工作经验

  • 0+

    研发工程师

  • 0+

    国家

  • 0+

    合作伙伴

  • 0+

    所获奖项

  • 我们符合iso 27001标准
  • 我们符合iso 9001标准
  • NIST
  • HIPAA验证