是否可以将完整的 DBCC CHECKDB 操作安全地卸载到不同服务器上的还原备份?

Geo*_*ios 2 sql-server dbcc-checkdb

我们目前正在朝着 24/7/365 运营模式迈进——因此我正在调查我们的维护策略。

我无法弄清楚的一项是 DBCC CHECKDB。我已经看到许多资源报告说 DBCC 可以通过执行完整备份、在单独的 SQL 实例上恢复该备份并在该恢复的副本上运行我们的 CHECKDB 来卸载。我还发现一些资源报告说由于边缘情况,这不安全。

如果不在生产数据库本身上运行,运行 CHECKDB 是否安全?如果不是,在恢复的副本上运行哪些部分是安全的?

Sco*_*red 6

SQL Server 专家Paul Randal在他的文章CHECKDB From Every Angle: Consistency Checking Options for a VLDB 中讨论了这个选项

使用单独的系统

这种替代方法相对简单——在另一个系统上恢复您的备份(您正在定期备份,对吗?)并在恢复的数据库上运行完整的 DBCC CHECKDB。这减轻了生产系统的一致性检查负担,还允许您检查备份是否有效。然而,这样做有一些缺点:

  • 您需要在备用系统上有足够的磁盘空间才能将备份还原到其中。如果生产数据库有几TB,则备用盒上也需要相同的几TB。这相当于一笔不小的资金——初始资本投资加上持续的存储管理成本。(希望未来的版本能够缓解这种情况——而在微软,我发明了一种机制并申请了专利,该机制可以在不恢复备份的情况下检查数据库的一致性。)

  • 如果一致性检查发现错误,您就不能确定生产系统上的数据库已损坏。导致损坏的备用盒子可能有问题。唯一确定的方法是在生产系统上运行一致性检查。不过,这是一个很小的代价,因为在大多数情况下,备用系统上的一致性检查是没问题的,所以您知道在进行备份时生产数据库是干净的。

除了 Paul 提到的缺点之外,我不知道将一致性检查卸载到另一个系统有任何问题。

我提供了一个问题的答案 -如何对 SQL Server 数据库备份文件进行完整性测试?我在那里描述了我们在我的商店使用的过程。

在我的商店,我们有一个“播放”服务器,我们用它来自动恢复我们认为“重要”的数据库的最新 FULL/DIFF。我们使用 Windows 任务计划程序来启动一个包含多个 SQLCMD 步骤的 bat 文件。成功恢复后,我们运行完整的 DBCC CHECKDB WITH ALL_ERRORMSGS,NO_INFOMSGS 并将结果输出到 txt 文件。然后我们将输出的 txt 文件通过电子邮件发送到数据库组进行评估。

这个过程测试两件事

  • 我可以恢复我的备份吗?
  • 备份中的数据是否结构完整 (DBCC)

附加说明:腐败随时可能发生。在DBCC CHECKDB备份良好或成功后立即尝试运行DBCC一致性检查。