我需要备份 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:如果您知道能够生成跨数据库同步备份的第 3 方解决方案,请提及。
您正在寻找的是跨所有客户数据库的一致备份,您应该使用完整备份以及
Marked Transactions
(以粗体添加的重点):确保使用 进行临时事务日志备份
COPY_ONLY
,否则恢复将很痛苦,因为没有任何临时事务日志备份COPY_ONLY
都会破坏日志链。作为预防措施,您可以限制用户仅COPY_ONLY
使用备份。标记的交易将适用于您的情况。进行并行备份的唯一方法是对
STRIPE
它们进行备份,但最终要确保不会丢失备份条带。为了使它们更快,您可以使用BUFFERCOUNT
和MAXTRANSFERSIZE
。您应该使用备份压缩以及启用即时文件初始化。
参考
如果您正在运行完整备份和事务日志备份(如果您认为此数据很重要,则应该这样做),您可以将备份和事务日志备份复制到测试系统并执行时间点还原以将数据库还原到+- 同时。
根据所有数据库是否驻留在同一台 SQL Server 机器上或服务器时钟同步的好坏,您应该能够匹配“几秒不同步”目标。
它可能有点像创可贴的解决方案,但可以满足要求并且相当简单且便宜。
如果您没有来自重要数据库(处于完全恢复状态)的完整备份和事务日志备份,您确实需要修改备份策略。SAN 级别的快照确实没有考虑让数据库处于完全恢复模式的意义,因为无论如何您都无法进行时间点恢复。
请阅读丹尼先生对此有何评论
在您指出的情况下,您是否通过基于第 3 方或 Microsoft 的 VSS 提供程序查看了 VSS 备份?您可以执行不会破坏生产恢复链的 COPY_ONLY 备份,并且最终应该得到所有数据库的备份,然后您可以在其他地方恢复到合理的范围内。请记住,VSS 备份与数据库快照具有一些相同的机制和缺陷,因为非常活跃的数据库可能会由于使用的稀疏文件而导致磁盘空间问题。在此处查看有关 SQL Writer 服务的 TechNet 资源,并在此处查看SQL Server 的 VSS 备份。
要通过 Windows Server Backup 执行此操作,您将遵循手动备份的向导步骤,确保您在 VSS 设置下的自定义配置设置中选择 VSS 复制备份。这将使您的 Windows Server 备份不会干扰在服务器上进行的任何其他备份。有关详细信息,请参阅Windows Server 备份参考。
我会投票给@Kin's 作为答案,因为它是第一个符合问题要求的答案。我最终找到了一个额外的答案,我将在下面描述它。
对于使用简单恢复模型的客户,我需要从在管理程序或 SAN 级别的 T0 获取的临时磁盘快照中提取的 MDF 和 LDF 的副本。我可以使用这些从 T0 恢复状态下的数据库。
对于使用完全恢复模式的客户,我需要:
在 T0 之前完成的最新完整备份的主要备份过程的副本 + 覆盖 T0 的后续事务日志备份的最小链。然后我可以执行一个时间点恢复到 T0。
访问执行我自己的辅助
COPY_ONLY
备份。我将在 T0 并行启动它们,这应该不会超过几秒钟,这是我的主要问题。然后,在还原时,我将从每个备份执行到FirstLSN的时间点恢复。这样做的好处是它根本不需要我与 MAIN 备份过程进行交互,这是我的另一个担心,他们甚至可以在我的COPY_ONLY
备份运行时截断日志而不会影响它们的一致性。对于作为生产副本的 QA 和其他环境,我每年都会这样做几次。对于还原,完全恢复模式确实是必要的,并且还原到某个时间点效果很好。还有很多复制,在恢复到某个时间点后,我们很少出现“未找到行”错误。我们还将 SAN 克隆/快照方法用于地理上遥远的生产副本,并且对于同步数据库也很有效。