要将10-20个SQL Server数据库备份和还原到〜同步状态?


15

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

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

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

我在寻找比这些更好的主意:

理念1:VM磁盘的SAN级别快照。从快照xcopy MDF / LDF。

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

理念2:在所有数据库之间进行复杂的备份和同步还原

这要求我要求数据库在完全恢复中运行,而这是我所不希望的。在截止日期(T0)之前,为所有数据库开始并行备份。达到T0后,备份所有日志(最多需要几分钟)。进行大量的备份,然后尝试还原它们并向前/向后滚动日志,以获得相对于T0的数据库之间的某种一致性状态。
这需要大量的计划和脚本来可靠地使用它,因此我会竭尽全力避免它。

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

PS1:我很想能够使用数据库快照。这个想法是在每个数据库上启动一个快照(应该以秒为单位),然后在接下来的几分钟/小时内依次完全备份每个数据库。然后将它们全部还原到另一台服务器上,并将它们还原为快照。AFAIK这种情况是不可能的,因为快照无法与数据库一起备份。它们只能在创建它们的服务器上回滚到位。此外,他们需要企业版,但我并没有为所有客户提供。

PS2:如果您知道能够产生跨数据库同步备份的第三方解决方案,请提出。


此方案的SQL Server版本是什么?我们在这里谈论的数据库的大小大约是多少?
KASQLDBA 2015年

Answers:


12

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

您正在寻找的是跨所有客户数据库的一致备份,您应该同时使用FULL备份Marked Transactions(以粗体显示)。

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

在此处输入图片说明

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

我需要SQL Server 2008 R2和更高版本的解决方案。db大小最大为每db 50 GB,所有这些文件的备份时间可能超过1-2小时。

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

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

参考


1
只需注意一点,not using如果您有足够的存储空间,备份压缩可以进一步加快备份速度。

4
在存储速度较慢的情况下,我怀疑压缩开销是否合理,因为在I / O上节省的时间将超过在CPU上花费的额外时间。在更快的存储上,压缩的好处将更多地放在存储空间上。
亚伦·伯特兰

@ShawnMelton我同意您的看法,但是在传输备份时,压缩备份的传输要快得多。如果不进行压缩,备份将很快(取决于存储子系统),但是考虑到压缩带来的好处,我倾向于在自己的环境中将其打开。
Kin Shah 2015年

@Kin,我认为移动事务不是这里的解决方案,因为:A)它们似乎并未设计为在与进行备份的服务器不同的服务器上工作。有些人通过将行恢复到logmarkhistory中来解决它,但是我不能使用未记录的行为。B)我无法更改我的应用程序的代码以添加对m交易的支持。我需要从备份脚本开始特殊的m事务,如果我正确理解的话,它们会使所有较新的事务停顿,直到提交了比标记旧的事务。这会影响应用程序的可用性,这是一个主要的障碍。
bogdan

3
您在这里实际询问的内容有点不清楚。首先,您有一个完全恢复的环境,然后有几个客户端,每个客户端都有自己的备份策略。您不想更改应用程序层,不想进行任何sql备份,也不想进行任何块级复制,但是希望有一个解决方案。要求不断更改涉及实际“工作”的所有内容。不幸的是,我们没有magic.stackexchange.com网站。
汤姆五世-试试topanswers.xyz 2015年

7

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

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

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

如果您没有重要数据库的完整备份和事务日志备份(正在完全恢复),则确实需要修改备份策略。SAN级别的快照确实可以解决数据库处于完全恢复模式的问题,因为无论如何您将无法进行时间点还原。

请阅读MrDenny关于此事的评论



1

在您指出的情况下,您是否通过第三方或基于Microsoft的VSS提供程序查看了VSS备份?您可以执行COPY_ONLY备份,而这不会破坏您的生产恢复链,并且应该最终备份所有数据库的备份,然后可以在合理的范围内将其恢复到其他位置。请记住,VSS备份具有一些与数据库快照相同的机制和缺点,因为非常活跃的数据库可能会由于使用的稀疏文件而导致磁盘空间问题。采取对SQL编写器服务来看看在TechNet资源在这里和SQL Server的VSS备份这里

要通过Windows Server Backup执行此操作,您将按照向导步骤进行手动备份,以确保在“ VSS设置”下的自定义配置设置上选择“ VSS复制备份”。这将使您的Windows Server备份不会干扰服务器上进行的任何其他备份。有关详细信息,请参见Windows Server Backup参考


我认为VSS是在虚拟机监控程序/ SAN级别上获取磁盘快照的替代方法。我为使用简单恢复的客户在解决方案中包括了这些案例(现在作为附加答案发布)。
bogdan

1

我将@ Kin's投票作为答案,因为这是第一个与问题要求相符的答案。我最终找到了另一个答案,下面将对其进行描述。

对于使用简单恢复模型的客户,我需要从虚拟机管理程序或SAN级别在T0拍摄的临时磁盘快照中提取的MDF和LDF的副本。我可以使用它们从T0的状态恢复数据库。

对于使用完全恢复模式的客户,我将需要:

  • 从他们的MAIN备份过程中,在T0之前完成的最新完整备份的副本,再加上覆盖T0的后续事务日志备份的最小链。然后,我可以将时间点恢复到T0。

  • 可以执行我自己的辅助COPY_ONLY备份。我将在T0处并行启动它们,这应该花费不超过几秒钟的时间,这是我的主要第一要务。然后,在还原时,我将从每个备份中恢复到FirstLSN的时间点。这样做的好处是,它完全不需要我与MAIN备份过程进行交互,这是我的另一个问题,他们甚至可以COPY_ONLY在运行备份时截断日志,而不会影响其一致性。


0

我每年针对质量检查和其他生产环境副本执行几次此操作。对于还原,确实需要完全还原模式,并且还原到某个时间点效果很好。还有很多复制,而且很少会在恢复到某个时间点后出现“找不到行”错误。我们还将SAN克隆/快照方法用于地理上遥远的生产副本,并且对于同步数据库也非常有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.