我有一台 SQL 2005 SP 2 服务器,正在运行维护计划,该计划每天 22:00 执行完整备份,每 4 小时执行差异备份,每 30 分钟执行日志备份。该计划备份所有系统和用户数据库(所有用户数据库都处于完整恢复模式)。完整备份和日志备份全部完成并验证无问题 - 我已通过进行一些测试恢复确认了这一点。每天早上,差异备份都会从 2 个数据库中抛出错误,指出不存在完整备份。
总是有相同的两个数据库出现此错误 - 所有其他数据库都正常。如果我再次手动运行完整备份,差异将正常运行直到第二天早上。
我相当确定问题出在管理使用 Bacula 的服务器的公司在午夜运行的 VSS 备份上。在 SQL 日志中,我可以看到 VSS 仅在 Bacula 运行时冻结/解冻系统数据库和这两个数据库。
显然,我可以让托管公司停止备份其工作中的数据库,因为他们无论如何都会获取我的 SQL 备份文件,但我只是想知道为什么会发生这种情况。这两个数据库可能有什么不同,因为我检查过的每个选项都与完成良好的选项相同。我在另一台服务器上设置了相同的计划,运行起来没有问题。
谢谢,克里斯。
答案1
我认为您应该查看在 22:00 执行完整备份的作业的作业历史记录。可能会出现警告,并且可能会跳过某些数据库备份,或者没有完整备份的 2 个数据库没有安排完整备份。还要检查完整备份作业的持续时间,如果 Co 的 Bacula 备份在完整备份完成之前开始,则确实可能存在问题(尽管数据库的完整备份需要 2 小时有点极端)。无论如何,消息是明确的,出于某种原因,这两个数据库没有进行完整备份。
答案2
您的所有数据库是否都在完整恢复模式下运行?VSS 备份的行为可能会有所不同,具体取决于您是在完整恢复还是简单恢复中。
如果 VSS 备份发生在您执行差异备份之后且在运行完整备份之前,那么这就是您的问题。您需要最后一次完整备份才能使差异备份正常工作。
我认为您的选择是:
- 禁用 SQL VSS 编写器服务,以停止破坏备份链的第三方备份
- 从 SQL Server sysadmin 服务器角色中删除内置管理员组(只需确保其中有另一个用户,或者您有 sa 密码)这将有效破坏 SQL VSS 服务访问 SQL 以执行这些备份的能力
- 忽略它并开始使用您拥有的日志备份,只需确保保留足够的内容来涵盖您上次的完整备份。
答案3
我还没有找到明确的答案,为什么这种情况只发生在这两个数据库上(并且只发生在这台服务器上),但我已经决定重新调整所有数据库的备份时间,以便我们的完整备份(SQL)在 Bacula 备份运行后立即进行,这样我们就可以重置任何设置错误的标志。它已经这样运行了几天,没有出现问题。