将 10-20 个 SQL Server 数据库备份和恢复到同步状态?

bog*_*dan 15 sql-server-2008 sql-server backup snapshot restore

我需要备份 10-20 个大小在 10-50 GB 之间的 SQL Server 2008 R2 数据库,同时它们在线并由单个企业应用程序同时使用。我还需要将它们恢复到在所有数据库之间基本同步的状态(我可以承受数据库之间长达几秒钟的不同步)。目的是为 QA​​/DEV 环境捕获生产数据。

我强烈希望不要求数据库在完全恢复中运行,并提出一种备份方法,该方法专用于为 QA 环境捕获数据,并保持独立于不受我控制的主备份过程。

对于我的客户,捕获 20 个完整备份(每个约 30 GB)需要 1-2 小时。这使得按顺序进行完整备份是不可接受的,因为在简单恢复中运行时数据库会过于不同步。

我正在寻找比这些更好的想法:

想法 1:虚拟机磁盘的 SAN 级快照。从快照 xcopy MDF/LDF。

一旦复制的文件附加到不同的服务器实例,其恢复过程应该生成几乎同时快照的一致数据库。
谷歌搜索使我确信这是一个坏主意,至少因为我可能会与 master/msdb/etc 不同步。

IDEA 2:在所有数据库中编排复杂的备份和同步还原

这要求我要求以完全恢复运行的数据库,这是我不想要的。在截止日期 (T0) 之前为所有数据库启动并行备份。到达 T0 后,备份所有日志(最多需要几分钟)。获取由此产生的无数备份并尝试恢复它们并向前/向后滚动日志,以获得相对于 T0 的跨数据库某种程度的一致状态。
这需要大量的计划和脚本才能可靠地使用它,所以我会竭尽全力避免它。

我是否缺少其他解决方案?

PS1:我希望能够使用db snapshots。这个想法是在每个数据库上启动一个快照(应该在几秒钟内结束),然后在接下来的几分钟/几小时内按顺序完全备份每个。然后在不同的服务器上恢复所有这些并将每个恢复到快照。AFAIK 这种情况是不可能的,因为快照不能与数据库一起备份。它们只能在创建它们的服务器上就地回滚。此外,他们需要企业版,我没有为所有客户提供。

PS2:如果您知道能够生成跨数据库同步备份的 3rd 方解决方案,请提及它。

Kin*_*hah 12

我需要备份 10-20 个由单个企业应用程序同时使用的 SQL Server 数据库,当它们在线时,以便将它们恢复到在所有数据库中基本同步的状态

您正在寻找的是跨所有客户数据库的一致备份,您应该使用完整备份以及Marked Transactions(以粗体强调):

当您对两个或多个数据库、相关数据库进行相关更新时,您可以使用事务标记将它们恢复到逻辑一致点。但是,此恢复会丢失在用作恢复点的标记之后提交的任何事务。仅当您正在测试相关数据库或您愿意丢失最近提交的事务时,才适合标记事务。

在此处输入图片说明

确保您使用 进行临时事务日志备份COPY_ONLY,否则您的恢复将很痛苦,因为任何临时事务日志备份都不会COPY_ONLY破坏日志链。作为预防措施,您可以限制用户 使用COPY_ONLY备份

我需要一个适用于 SQL Server 2008 R2 及更高版本的解决方案。db 大小高达每个 db 50 GB,备份所有这些的时间可能超过 1-2 小时。

标记交易将适用于您的情况。进行并行备份的唯一方法是对STRIPE它们进行并行备份 ,但最终您要确保不会丢失备份条带。为了使它们更快,您可以使用BUFFERCOUNTMAXTRANSFERSIZE

您应该使用备份压缩以及启用即时文件初始化

参考

  • 在较慢的存储中,我怀疑压缩开销将是合理的,因为节省的 I/O 时间将超过花费在 CPU 上的额外时间。在更快的存储中,压缩的好处更多地体现在存储空间上。 (4认同)
  • 有点不清楚你在这里真正问的是什么。首先你有一个完全恢复的环境,然后你有几个客户端,每个客户端都有自己的备份策略。您不想更改应用程序层,您不想进行任何 sql 备份,您不想任何块级复制,但您希望有一个解决方案。要求不断变化,涉及实际“工作”的一切都被拒绝。不幸的是,我们没有 magic.stackexchange.com 网站。 (4认同)

Tom*_*m V 7

如果您正在运行完整备份以及事务日志备份(如果您认为此数据很重要,您应该这样做),您可以将备份和事务日志备份复制到测试系统并执行时间点还原以将数据库还原到+- 同时。

根据所有数据库是否驻留在同一 SQL Server 机器上或服务器时钟同步的程度,您应该能够匹配“几秒不同步”目标。

它可能有点创可贴解决方案,但会满足要求并且相当简单和便宜。

如果您没有来自重要数据库(处于完全恢复状态)的完整备份和事务日志备份,则您确实需要修改备份策略。SAN 级快照对于将数据库置于完全恢复模式确实没有意义,因为无论如何您都无法进行时间点恢复。

请阅读丹尼先生对此的看法