【问题标题】:SQL Server backup strategy questions for DB in Full recovery mode完全恢复模式下数据库的 SQL Server 备份策略问题
【发布时间】:2017-06-07 18:41:26
【问题描述】:

我最近负责一些从 SQL Server 2005 到 2014 的 SQL 服务器的数据库管理,其中许多数据库处于完全恢复模式,但是没有设置好的持续备份维护计划。

在我看来,以前的 DBA 只会在事务日志文件失控并填满硬盘驱动器时才处理它们。所以我想改变这个并一劳永逸地解决这个问题。我一直在阅读并认为我对需要做的事情有一个不错的理解,所以我想验证我的理解并提出一些问题以澄清我仍然没有完全理解的几点.

因此,根据我迄今为止的理解,我需要创建一个从完整备份开始的维护计划。我仍然需要与管理层讨论以找出诸如 RTO、可接受的数据丢失等问题,因此让我们假设对于这个示例,我们将在周日进行完全备份。

接下来,我将在此维护计划中添加每晚的差异备份......所以周一到周六。我意识到这也可能是完整备份或更频繁地运行差异,但这只是作为一个示例,以确保我正确理解事物。

现在关于事务日志备份。我知道我需要备份这些文件并截断​​日志文件,以防止它不断增长并失控。我不知道是否有关于多久备份一次的具体建议,但我看到建议 15 分钟。我想这将更多地属于可接受的数据丢失窗口。对吗?

所以我发现的另一件事是,当您使用截断备份事务日志文件时,如果日志文件已经失控,它不会缩小文件。我还读到,至少定期收缩这些文件并不好,因为一旦收缩它,它就需要再次增长,这会导致碎片和性能问题。

现在,由于我目前处于文件已经失控的情况,我假设我实际上应该在我完成维护工作后缩小日志文件一次。这个假设正确吗?

还有一次我收缩了事务日志文件,是否有任何维护任务我应该运行以避免由于收缩日志文件而导致的性能问题?

我想知道的另一个问题是关于时间点恢复。因此,假设我在早上 5:00 进行一次完整备份,并且每 15 分钟进行一次事务日志备份。我在早上 6 点 18 分收到警报,出现了问题(假设一个表已被删除)。所以我知道我可以通过早上 5:00 发生的完整备份进行恢复,并将其置于 NO RECOVERY 模式,并从早上 5:15 到早上 6:15 恢复所有事务日志备份,但这就是我感兴趣的在...因为我的数据库处于完全恢复模式,是否可以在删除表之前以某种方式使用我现有的事务日志文件(而不是备份)在 6:15 到 6:17 之间前滚所有事务?如果是这样,你会怎么做?我想这显然在您丢失带有事务日志文件的硬盘驱动器或服务器爆炸的情况下不起作用......但在我概述的情况下,它可以吗?

谢谢

【问题讨论】:

  • 不确定这是否相关,但我想我还应该提到其中一些数据库是 SharePoint 2007 和 2010 数据库......以防万一这会有所不同

标签: sql-server database database-backups database-restore backup-strategies


【解决方案1】:
  1. 我建议在每个人停止工作后进行完整备份,例如。 G。晚上 10 点(如果是这样的话),而不是在人们开始工作前不久的早晨。只是为了给它足够的时间运行。

  2. 就个人而言,如果数据库不是太大而无法保存 14 天的备份,我更喜欢每天进行完整备份而不是增量备份。我觉得依赖更少的文件会更好。如果数据库和完整备份太大,增量备份可能是更好的选择。

  3. 正如您所说:您在一天中创建多少事务日志备份取决于可接受的数据丢失窗口。在一个 > 5 个人在系统上工作的环境中(只是直觉),我会将它们配置为运行 15 分钟,在非常大的系统上可能会更长。

  4. 在第一次事务日志备份后,您可能希望将 LOG 文件缩减一次。

  5. 我认为在日志收缩后没有必要运行任何优化。

  6. 据我所知,无法恢复 06:15 到 06:17 之间的交易。

在激活事务日志备份时,请记住第一个事务日志备份会非常大(大约是当前大日志的大小)。确保磁盘上有足够的空间,直到您缩小日志文件并删除第一个事务日志(通常在维护计划内自动完成,例如 14 天后)。

【讨论】:

  • 附录:对于第 6 点,如果您在现有数据库的顶部进行还原,第一步是进行“尾部日志备份”,然后使用该尾部执行还原顺序将备份记录为最后一个(使用stopat = '2017-06-17 06:17'。如果您要恢复到一边,您只需要一个跨越相关事件的事务日志备份。如果您每 15 分钟执行一次,那么您的最后一次恢复将是 06:20 tran 日志备份(使用前面提到的 stopat 子句)。
  • 感谢您的帮助。另一个快速的问题。当您设置备份维护计划时,您通常会在每次完整备份之前执行一次 CHECK DB 吗?这是每天都应该做的事情吗?
  • 我每天都这样做,是的,但我不确定 MS 的建议是什么。损坏,如果没有被发现,可能会成为数据库备份的一部分,我希望尽快得到坏消息。 ;)
  • 这也是我的想法。感谢您的确认
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多