checkdb前后全备份

Fre*_*gen 4 sql-server backup dbcc-checkdb

最近有人告诉我我应该在 dbcc checkdb 之前和 checkdb 之后进行一次完整备份,即使在完全恢复中也是如此。有人可以解释我为什么要这样做吗?

我认为在 checkdb 之前进行完整备份是不必要的(在完整恢复中),因为我总是可以恢复上次完整备份 + 差异备份 + t-log 备份。这是一个错误的假设吗?

Tar*_*zer 13

在运行之前和之后无需进行完整备份DBCC CHECKDB。建议您在 FULL 备份之前进行,DBCC CHECKDB以便您确切知道哪些 FULL 备份不包含DBCC CHECKDB因损坏而失败的数据库损坏。最后一次成功之前的完整备份DBCC CHECKDB是没有损坏的。

要从损坏中恢复,您可以使用 FULL+DIFF+LOG 链或 FULL+LOG 链。从上次成功之前选择完整备份DBCC CHECKDB。如果在最后一个 success 之前有一个 DIFF DBCC CHECKDB,那么您也可以使用它。但是最后一次成功之后的 DIFFDBCC CHECKDB可能会导致数据库损坏,这取决于 DIFF 发生的时间和损坏发生的时间。

LOG 备份不包含数据页,因此它们中没有损坏的数据页。因此,如果您在未损坏的 FULL 或未损坏的 FULL + 未损坏的 DIFF 之后拥有整个 LOG 链和日志尾部,则可以在不丢失数据的情况下进行恢复。

  • @GarethLyons,DBCC CHECKDB 运行后的完整备份,即使是紧随其后,也可能包含损坏。这不太可能,但是在检查页面之后和完整备份备份该页面之前,损坏可能已经溜进来了。数据库越大,它发生的可能性就越大。还是会少见。但这就是为什么 FULL 备份应该在 DBCC CHECKDB 之前发生的原因。 (2认同)
  • @GarethLyons 当然,但是*在*成功的 checkdb 之后立即发生的完整备份可能更有价值,因为它不太可能发生损坏。checkdb 显示损坏之前的完整备份只有在 checkdb 是导致损坏的原因时才有价值。我不知道我会把“防止浪费的备份操作”放在优先级列表的高位——如果我们发现损坏,我们需要解决的问题比我们将丢弃的备份所使用的资源要大得多。 (2认同)