为什么我的 SQL 服务器差异备份有时会失败?

Why is my SQL Server Differential backup failing sometimes?

我遇到的问题只发生在我的 SQL 服务器差异备份作业失败并显示类似于

的错误消息的情况下
Msg 3035, Sev 16, State 1, Line 1 : Cannot perform a differential backup for database "MyDatabaseName", because a current database backup does not exist. Perform a full database backup by reissuing BACKUP DATABASE, omitting the WITH DIFFERENTIAL option. [SQLSTATE 42000]
Msg 3013, Sev 16, State 1, Line 1 : BACKUP DATABASE is terminating abnormally. [SQLSTATE 42000]

我目前正在使用 Ola Hallengren 的 SQL Server Mantenance Solution script 进行备份、完整性检查和索引维护。我已经安排了备份作业:

我还将清理时间设置为 168 小时...即 7 天。

我知道通常当出现此错误消息时,是由于不存在完整备份,或者可能是数据库的恢复模式被更改。我已经检查了这两个,但似乎都不是这样。我可以确认我的周五完整备份是成功的,但是我的周六和周日差异备份失败了。恢复模式也没有变化,也没有通过 SQL 服务器进行手动备份。

值得注意的是,这只是偶尔发生。有时差异备份可以正常工作,有时会失败。

此服务器是虚拟机,我们使用的是 VMWare vSphere/vCenter 6.5。我已经和我的服务器管理员谈过并询问他的备份是如何 运行 他告诉我我们正在使用利用 VMWare 快照技术的 Quest AppAssure,并且他每 x 分钟备份一次驱动器,所以它有可能他备份的时间变了,最终和我的重合了

我们回顾了周末他的备份 运行 的时间,它们发生在我开始前的几分钟内。我想知道这是否会导致我的备份问题?如果是这样,有什么方法可以防止这种情况发生,还是我们只需要在不重叠的不同时间计划备份?

谢谢

只想post更新这个问题

我们昨天安排了与 Quest 的通话,他们向我保证他们的备份只拍摄卷快照,不会影响我的 SQL 备份。他们说我看到这些错误的原因可能是 Rapid Recovery(我猜 AppAssure 已重命名为 Rapid Recovery)和我的 SQL 备份作业都试图同时使用卷影复制服务,并且所以我们只需要错开备份作业。我最终发现这并不完全正确,因为 Rapid Recovery 备份配置为截断我的 SQL 日志。我还告诉快速恢复的人,当我查询 msdb 备份集 table 时,我看到列出的备份作业与快速恢复备份的时间一致。他仍然向我保证,这对我的备份影响为零。

我仍然担心 Rapid Recovery 备份可能会影响我的备份文件链,所以在我们的测试环境中,我右键单击我们的一个数据库并单击任务 > 还原 > 数据库只是为了查看恢复历史记录.我看到一个数据库备份列为完全(仅复制)类型,与快速恢复备份一致,然后是我的一些事务日志备份。

在我看来,Rapid Recovery 肯定会影响我的 SQL 备份。

还有一件事需要注意,我刚刚在测试环境中进行了尝试。我使用完整的、事务日志、差异和完整(仅复制)做了一些测试备份,只是为了看看在 SQL Server Management Studio 中的恢复 window 中出现的情况。

所以我意识到在默认恢复屏幕中,它会尝试使用各种备份文件的最少组合来恢复到最近的时间点。要超越上次完整备份,我必须使用时间轴选项。

  • 我可以看到完整备份是第一项,然后是事务日志备份。
  • 执行差异备份后,我看到完整备份和差异备份,但没有更多的事务日志备份....这是有道理的,因为它试图获得最接近的恢复时间。
  • 接下来,如果我再做一次事务日志备份,我会看到完整日志、差异日志和事务日志备份

然而,令我感到惊讶的一件事是,如果我先执行完整(仅复制),然后执行事务日志备份,我会在恢复文件列表中看到这两项,但如果我在之后执行差异一个完整的(仅限副本),它向我展示了最后一个完整的(仅限非副本),加上差异。我希望备份始终基于最后一次完整备份,包括事务日志和差异备份。我认为备份链中将忽略仅复制备份。

接下来,我决定使用时间线还原功能和 select 我测试期间的一个时间点,其中 Rapid Recovery 备份不在所列备份的一部分,并进行验证备份。正如预期的那样,它是成功的。在此之后,我尝试恢复到另一个时间点,其中列出了 Rapid Recovery 完整(仅复制)备份,并且在快速恢复的完整(仅复制)备份文件上验证失败,因为它不存在于 sql服务器。

关于如何解决这个问题有什么建议吗? Rapid Recovery 备份的目的应该是备份机器,以防万一我们丢失服务器并且必须恢复整个服务器,再加上它获取我的 sql 服务器备份以供保留,因为我只在服务器上保留了 7 天的备份。

我们今天又与 Quest 通了电话,找到了解决问题的方法。

似乎在通过 Quest Rapid Recovery 配置备份时,您可以选择进行机器级备份或卷级备份。当它配置为执行卷级备份时,您可以选择它执行不支持 SQL 服务器的块级备份,或者执行支持 SQL 服务器的备份,这最终使用卷影复制服务,这些备份在 SQL 备份历史记录中显示为完整(仅复制)备份...即使您无法从 SQL 服务器恢复它们。

Rapid Recovery 只能按计划进行备份,而且可以选择在备份完成后对日志进行 T运行 分类以避免填满日志文件,但不能进行事务日志备份,因此您像使用本机 SQL 时间线恢复一样,失去了进行更精细的恢复到秒的能力...这就是我们选择使用本机 SQL 服务器备份的原因。

因此,要解决此问题,您需要执行没有 SQL 服务器 Awareness/integration 的机器级备份。或者您可以进行卷级备份,但禁用 SQL Server Writer 扩展和 t运行cate 日志选项以删除集成。

我们已经 运行 进行了一系列测试,并且从 point/time 完成此更改后,我们只看到 SQL 服务器备份,不再看到 Rapid Recovery 备份SQL 服务器备份历史记录。

所以现在我正在和我的 server/backup 管理员讨论,看看我们是否可以每天做一次机器级备份,这样我们就可以在发生灾难时进行机器级恢复,并添加一个我的备份驱动器的卷级备份,以便他在白天更频繁地捕获我的备份。我认为一旦完成,我们将拥有两种备份解决方案中最好的。

  • 能够进行机器级恢复(快速恢复)
  • 保留 SQL 服务器备份(快速恢复)
  • 灵活的时间点恢复(SQL 服务器)