“无法对数据库“myDb”执行差异备份,因为当前数据库备份不存在。”

“无法对数据库“myDb”执行差异备份,因为当前数据库备份不存在。”

我在尝试进行差异备份时遇到了一个似乎很常见的问题。我们有一个 SQL Server 2008 Standard(64 位),我们使用 Litespeed v 5.0.2.0 进行备份。我们每周进行一次完整备份,每天进行一次差异备份。问题是,每次我尝试进行差异备份时,都会收到以下错误:

由于请求中止,VDI 打开失败,
备份数据库正在异常终止。

无法对数据库“myDb”执行差异备份,因为当前数据库备份不存在。通过重新发出 BACKUP DATABASE 并省略 WITH DIFFERENTIAL 选项来执行完整数据库备份。

问题是我 100% 知道我有完整备份,因为我刚刚仔细检查过。只有一次我能够进行差异备份,那是在我进行完整备份后立即进行的。

我搜索了一下,发现这种情况很常见(尽管主要是在 SQL 2005 中),很多人建议的解决方案是禁用 SQL Server VSS Writer 服务,但我还没有尝试过。这个问题的原因是 #1 我想我可能需要这项服务,因为我正在使用第三方备份软件;#2 我不确定这项服务到底是做什么的,不想就这样禁用它。

你们中有人遇到过这个问题吗?你们是如何解决的?

谢谢你,

答案1

您是否在服务器上运行 VSS 备份(NTbackup、BE 等)来备份 SQL 数据以外的内容?根据,如果备份软件使用 VSS 进行快照,则 SQL 差异备份可能会无效。

据我所知,LS 不使用 VSS,正如 Nick 所说。根据此主题修复方法是禁用 SQL 编写器服务。

根据评论更新:

因为您正在使用 NTbackup 备份服务器上的其他文件,所以解决方法是禁用 SQL Writer 服务。

当 NTbackup 运行时,它会调用全部可用的 VSS 编写器,即使您不需要它们。这意味着 SQL 编写器将在创建快照时将数据库置于一致状态(将缓存刷新到磁盘)。然后数据库会认为它已备份,即使您没有从影子副本复制信息。这就是破坏备份的原因。

您可以检查一件事,以查看 VSS 是否针对 DB 运行(我确信它正在运行并且中断了链),即查看 SQL 日志(我认为它在错误日志中)。您应该在 NTbackup 作业运行时看到冻结/解冻事件。

答案2

我使用 lightspeed 已经有几年了,所以这可能已经改变了,但 light speed 不是提供自己的扩展存储过程来执行备份吗?在这种情况下,您应该调用这些来执行差异。您可能不应该调用本机 BACKUP DATABASE 命令。我认为您不能混合搭配本机/lightspeed 备份。

我尝试浏览 Quests 在线产品文档,但是遗憾的是您需要成为客户。

从 SQL Server 本机备份的角度来看,如果您从未进行过完整备份,那么您就无法进行差异备份。

VSS 服务允许通过卷影复制对 SQL Server 进行文件级备份。如果您使用 Lightspeed 进行备份并将 SQL Server 目录从服务器级 (OS) 备份中排除,则关闭此功能可能没问题。这可能与无法进行差异备份无关。

重新启动 SQL Server 实例是否可以解决问题?如果可以,您可能需要考虑增加 SQL Server 的 memtoleave看一下这个

答案3

发生此问题的最常见原因是如果您有另一个备份软件(NTBackup、BE、Bacula 等)对您的数据库进行快照(VSS 副本 - 卷影复制),则这可能会导致备份链中断并使您之前的差异备份无效,这就是为什么当您当前的差异备份过程启动时,它会失败,因为它无法看到在它之前发生了初始完整备份或另一个差异备份。

首先,您需要找出哪个软件工具正在创建数据库的快照备份,因为有几种方法可以解决这个问题。让我们考虑一下在 NTBackup 的帮助下进行快照备份的最常见情况。NTBackup 的解决方案首先,在服务菜单中检查 SQL Server VSS Writer,它必须具有以下设置:启动类型:手动,并且必须停止服务。如果 SQL Server VSS Writer 服务正在运行并且拍摄了快照,则完整恢复模型将被阻止,备份链将被破坏。要更改 SQL Server VSS Writer 设置,请转到“星形菜单”,在打开的窗口中找到“服务”,选择“SQL Server VSS Writer”。

右键单击该服务并选择“属性”,在打开的窗口中将“启动类型”设置为“手动”,在“服务状态”部分按“停止”以确保服务在您重新启动计算机后不会自动运行,然后单击“确定”应用所有更改。

答案4

尽管 Bacula 会拍摄数据库快照以及我自己的 SQL Server 备份,但我还是遇到了同样的问题。服务器上的数据库子集上存在某种错误,这非常令人讨厌。最后,我的解决方案是更改备份时间,以便在 Bacula 备份之后运行 SQL 备份,以确保 SQL Server 内部标志得到正确重置,以注意已进行完整备份。那是在 2005 年 - 我猜同样的 VDI 问题也影响了 2008 年。

供参考这里这是我之前的问题。

相关内容