2016-08-22 47 views
0

我正在学习SQL Server备份/恢复选项。不是在课堂上或任何事情上,而是因为我最近意识到,摆在我面前的这个人非常低效地设置了它。例如,full备份一天运行一次,事务备份每小时运行一次。所有这些都是通过工作完成的,而不是维护计划。在研究如何改善我工作的环境时,我学到了很多东西,但也陷入了一些困境。我希望确认我认识的内容,并澄清我还没有完全掌握的内容。提前致谢!有关SQL Server备份/恢复的澄清要点

据我所知,完整备份就是这样 - 数据库文件中的每一个位的完整备份,包括事务日志,直到备份开始。差异备份是同样的事情,但仅包含自上次执行完整或差异备份以来所做的更改。这些通常每天运行一次左右,而完整备份一周运行一次左右。

第一个问题:系统如何知道上次备份发生的时间?数据库中的标志?它是否打开并查看备份目标文件?它是否在内部设置,只要备份运行并且不会失败?

事务备份让我困惑了一下。我知道这种类型备份从最后一次完整/差异备份到当前时刻的事务日志,但是什么是“尾部日志”?我在文档中看到它被引用,据我所知,它只是从最近一次备份到“现在”的事务日志。如果我的db在备份七分钟后失败,我会有一个七分钟的尾部日志担心,对吧?

如果我要恢复失败的数据库,我该怎么做?假设星期二下午3:41失败。我的完整备份在上周二凌晨2:00运行,我的差异在凌晨5:00运行失败,而我的事务备份每15分钟运行一次,所以我在星期二的凌晨3点30分有良好的数据。我的备份全部进入本地服务器进行存储,称之为\备份。因此,我的文件位于\ backups \ sql \ full,\ backups \ sql \ differential和\ backups \ sql \ transaction_logs中。

  • 文件夹结构是组织备份的最佳方式吗?有没有更好或更标准的方法,还是没有关系?
  • 鉴于这一切,我该如何恢复我的数据库?我已经完全恢复,但从来没有其他两个。我在Server 2012上使用SSMS。
  • 如果我要使用这些备份将我的数据库移动到新的服务器,该怎么办?恢复过程是否相同?
  • 有关我如何更改此设置以获得更好的任何其他建议?

我对第二个问题的猜测是首先将失败的数据库脱机,然后恢复完全备份,就像我以前所做的那样。我接下来再次执行恢复,但是这次请从差异备份中选择文件。最后,我要重复一次,这次使用事务备份恢复到3:30。我会失去十一分钟的数据,但我认为我没有选择。或者我可以从事务备份开始,看看它能否正确恢复,而“完全恢复”的想法最适合移动数据库?

还有什么我应该知道的自动备份我们所有的数据库?有些非常大,我们需要确保我们有尽可能稳定的备份计划。我非常感谢任何人对此有任何意见。

回答

0

差异备份是相同的事情,但仅包含自上次执行完整或差异备份以来所做的更改。

不可以。差异仅在执行上次完整备份后发生变化。作为一个segue,数据库如何通过在名为Differential Page Maps的特殊数据库页面中跟踪它们来知道差异备份中包含哪些内容。这些页面会在完整备份中重置。

另一个关于“什么是尾部日志?”的问题,它只是数据库中尚未备份的部分日志。

顺便提一句,有关何时存储在msdb.dbo.backup *表中的备份类型的元数据。

一般来说,还原顺序是这样的:

  1. (可选)采取尾日志备份与backup log «your database name» with norecovery;这将会把你的数据库脱机(从技术上讲,它把它恢复状态)。如果您处于数据库关闭的状态,则在执行还原之前,请尝试获取最后一次注销。
  2. 恢复您可以恢复到的时间点之前的最新完整备份。确保包含with norecovery子句,以便还原语句不会同时运行崩溃恢复,从而无需从头开始重新启动即可进行进一步的还原。
  3. 恢复您可以恢复到的时间点之前的最新差异备份。如果您最后一次进行了完整备份,但尚未完成差异备份,则可能没有(并且没关系)。确保包含with norecovery子句,以便还原语句不会同时运行崩溃恢复,从而无需从头开始重新启动即可进行进一步的还原。
  4. 从差异的开始时间恢复所有日志文件,直到您想恢复到的时间点(包括您首先执行的尾部日志备份)。确保包含with norecovery子句,以便还原语句不会同时运行崩溃恢复,从而无需从头开始重新启动即可进行进一步的还原。
  5. 最后,做restore «your database name» with recovery;开始崩溃恢复。

您可以使用相同的过程来恢复到另一台服务器。您可能必须在恢复完整文件(如move «logical file» to «new location»replace)中包含可选的子句,并且您可能不会采用尾部日志备份。但所有的广泛笔画都是一样的。

至于如何更好地做到这一点的意见,我不会重新发明轮子。我会(并已经并将继续)使用由Ola Hallengren here免费提供的备份解决方案(包括“如啤酒”和“在演讲中”)。它做聪明事,如:

  • 时间戳文件
  • 把不同类型的备份文件在不同的目录
  • 黄柏数据库的逻辑组(即USER_DATABASES,SYSTEM_DATABASES),这样你就不必维护一个准确的清单。也就是说,它几乎总是会做正确的事情。
  • 涉及日志传送/可用性组正确
  • 数据库在差异备份,可选择采取完全备份,如果没有采取(例如,如果一个新的数据库被添加到服务器)
  • 所以更多

说真的,看看吧。我最后的建议是练习,直到你感觉这样下去。你想在紧急情况下做的最后一件事是阅读手册,试图找出如何做到这一点。

+0

谢谢,这很有帮助。我不认为你可以从损坏的数据库中获取尾部日志。我还会看看您提供的用于备份解决方案的链接;只是一个快速脱脂让我觉得这将是一个巨大的帮助。另外,它是免费的,所以不必谈论我的老板进行购买。 :) – AH16

+0

也许你可以对损坏的数据库进行尾部日志备份,也许你不能。但是如果日志文件完好无损,它应该会很好,这会使数据丢失得更少。但尝试便宜! –

+0

一个后续问题。如果我使用标准维护计划,新备份将如何取代旧备份?也就是说,本周的完整备份是否会覆盖上周的全部备份文件?差异备份如何不会变得很大?有没有一种方法可以让我保留以前的三个完整备份,以防服务器因新备份正在进行而失败? – AH16