分离数据库作为备份策略

Detaching a database as a backup strategy

我已经阅读了很多关于为什么这是个坏主意的文章。反对使用分离数据库作为备份的论点很多。但是,我仍然认为,就我而言,这是有道理的。意识到这些通常是管理员的话,他们知之甚少,我想把我的策略介绍给这里的好人,看看是否有人能告诉我为什么我正在做的事情使用内部备份机制会更合适.

让我解决一些常见问题。

  1. 我的数据库文件快满了,所以备份只复制 使用的页面与我无关;
  2. 我没有使用任何文件流存储;
  3. 当我分离并制作副本时,我的应用程序可以处理少量的停机时间;
  4. 伴随着分离数据库的各种文件权限噩梦已经解决。

数据库的总大小约为 1TB。我分离和附加而不是使用备份的主要原因是性能。在我的测试中,分离数据库、复制底层文件并再次附加原始文件比执行备份要快得多。在恢复期间,附加文件(即使我必须先将它们复制到正确的位置)也比恢复它们快得多。

我可以通过使用完全备份以外的其他方法来解决备份性能问题,但这对恢复没有帮助。万一发生灾难,我需要迅速备份并运行。我的应用程序可以定期处理少量停机,但任何长时间的停机都是灾难性的。恢复 1TB 的数据库所花费的时间超过了企业希望应用程序能够容忍的时间。

我经常读到的最后一条是分离数据库会带来一些风险。就像我们应该执行备份的测试恢复一样,我立即将任何复制的 MDF/LDF/NDF 文件附加到灾难恢复 SQL 服务器以确保副本是好的。我想我在这里暴露的是我可以分离数据库并破坏一些东西,这样原始的数据库文件就不能再重新附加了。老实说,我从来没有见过这种情况,所以如果真的有这种可能性,我觉得很遥远。我每晚都这样做,所以在这种(不太可能?)场景中我会丢失一天的报告数据。

我还遗漏了什么吗?

通过这种方法,您可以选择将缩短的恢复时间优先于恢复点(恢复时丢失的数据)。这是每个人都必须在某种程度上做出的合理权衡。

每次您分离并重新附加以进行备份时,您的数据库将处于脱机状态,而 BACKUP 命令根本不需要停机时间。与每天备份期间相比,在偶尔恢复期间更关心停机时间似乎很不寻常,但我想这取决于备份的实际时间和恢复的假设时间。

您没有提到事务日志备份。对于大多数人来说,日志备份提供了最佳的恢复时间和恢复点。您是否考虑将相对不频繁的日志备份作为替代策略?

如果恢复时间如此重要,那么您可能需要拥有可以恢复到的热备用硬件。如果您确实有一个备用服务器,那么您可以使用标准备份和恢复来最大程度地减少停机时间,而不是使用分离方法:只需每天将您的数据库还原到备用服务器。您甚至可以登录传送您的事务日志备份。

与任何备份和恢复策略一样,您应该对其进行测试。试一试 运行,看看失去一天的工作实际要花多少钱。也许人们很容易低估这笔费用。

当您分离并重新附加时,请确保包含日志文件。除了您附加的副本外,还保留一份脱机副本。如果附加碰巧失败(比如因为其中一个文件已移动),那么在某些情况下文件可能会 "touched" 以便它们不能轻易地再次附加。我的建议是永远不要尝试从您的 数据库文件副本附加。

您仍然需要使用 BACKUP 来备份主数据库(如果需要,还需要 model/msdb)。