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


尝试进行差异备份时,我有一个相当常见的问题。我们有一个SQL Server 2008 Standard(64位),我们使用Litespeed v 5.0.2.0来进行备份。我们每周进行一次完整备份,每天进行差异备份。问题是,每次我尝试进行差异备份时都会出现以下错误:

由于请求中止,VDI打开失败
  BACKUP DATABASE异常终止。

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

问题是,我知道100%我有一个完整的备份,因为我只是双重检查。只有一次我能够进行差异备份,那是在我完成备份后立即使用它。

我已经四处搜索并注意到这是非常常见的(尽管主要是使用SQL 2005),并且很多人建议并且我还没有尝试过的解决方案是禁用SQL Server VSS编写器服务。问题是#1我认为我可能需要这项服务,因为我使用的是第三方备份软件和#2我不确定服务的确切做什么,也不想像那样禁用它。

你有没有遇到过这个问题,你是如何解决它的?

谢谢,


7
2018-06-02 13:37






答案:


您是否在服务器(NTbackup,BE等)上运行VSS备份以获取除SQL数据之外的其他内容?根据 这个,如果备份软件使用VSS进行快照,则SQL差异备份可能会失效。

据我所知,LS不像Nick那样使用VSS。根据 这个帖子 修复是禁用SQL编写器服务。

根据评论更新:

因为您使用NTbackup备份服务器上的其他文件,所以修复将禁用SQL编写器服务。

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

有一件事你可以查看VSS是否针对数据库运行(我是肯定的并打破了链),请查看SQL日志(我认为它在错误日志中)。您应该在NTbackup作业运行期间看到冻结/解冻事件。


6
2018-06-02 15:43



有几个计划任务使用ntbackup.exe来备份服务器上的某些文件夹。不会禁用SQL VSS编写器弄乱这些ntbackup任务吗?谢谢... - user44127
@krimerd,不,它不会损害备份。由于您使用LS进行SQL备份,因此您应该排除包含DB的目录。当NTbackup运行时,它会调用所有可用的VSS编写器,无论您是否打算使用它们。在这种情况下,禁用SQL编写器不会对您造成伤害。 - Holocryptic
我可能会试一试,但首先我要确保这是造成错误的原因。我将禁用ntbackup任务,进行完整的SQL备份,看看我是否在尝试进行差异备份时遇到任何错误。如果我没有得到错误,那么说ntbackup导致了这个问题是非常安全的。谢谢Holocryptic。 - user44127
@krimerd,没问题。有一件事你可以查看VSS是否针对数据库运行(我是肯定的并打破了链),请查看SQL日志(我认为它在错误日志中)。您应该在NTbackup作业运行期间看到冻结/解冻事件。 - Holocryptic
全息,你是对的...我刚检查了SQL日志,当ntbackup任务被安排运行时,我可以看到几个日志(每个数据库一个),所有日志都有'备份'作为源和'类型= virtual_device“。在这些时间没有安排备份作业,没有人在那些时间手动进行任何备份,所以剩下的唯一剩下的就是ntbackup任务。这有点奇怪,因为安排的ntbackup @那个时候只备份一个文件夹,我不明白为什么它会触摸任何数据库或SQL服务器一般...再次感谢 - user44127


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

我试图在Quests在线产品doco周围寻找,但唉,你需要成为一个客户。

从SQL Server的本机备份角度来看,如果您从未进行过完全备份,则无法获取差异。

VSS服务允许通过卷影副本对sql server进行文件级备份。如果您使用lightspeed进行备份并从服务器级别(OS)备份中排除sql server目录,则可以将其关闭。这可能与无法进行差异备份无关。

重新启动sql server实例是否解决了这个问题?如果是这样,你可能想看看增加的sql服务器memtoleave 看一下这个


1
2018-06-02 14:03



谢谢你的回答尼克。你是对的,LS确实提供了自己的storeprocs,我从我的维护SSIS包中调用它们。但是,我仍然得到上述错误。再次感谢... - user44127
看起来像一个任务特定的问题! - Nick Kavadias
是的,它可能会通过本机备份获得同样的错误。再次感谢 - user44127


出现此问题的最常见原因是,如果您有另一个备份软件(NTBackup,BE,Bacula等),它会拍摄数据库的快照(VSS副本 - 卷影复制),这会导致备份链变为破坏并使之前的DIFFERENTIAL备份无效,这就是为什么当您的当前差异备份过程启动时,它将失败,因为它无法看到在它之前发生了初始FULL备份或其他差异备份。

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

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


1
2017-08-31 10:02





我遇到了同样的问题,尽管Bacula拍摄了数据库的快照以及我自己的SQL Server备份。有一种错误导致这种情况发生在服务器上的一部分DB上,这是最烦人的。最后,我的解决方案是更改备份时序,以便在Bacula备份之后运行SQL备份,以确保SQL Server内部标志已正确重置以注意已执行完整备份。那是在2005年 - 我猜同样的VDI问题也影响了2008年。

对于参考 这里 是我早先的问题。


0
2018-06-02 14:33



是的,它看起来就像我所处的情况一样。唯一的区别是我的数据库处于简单的恢复模式(因为我不需要采取tlog备份)而且在我的情况下我所有的4个数据库都是尝试使用相同的错误进行备份失败。如果不出意外,我会尝试阻止VSS编写器,看看这是否有助于并且不会引起其他问题。谢谢克里斯 - user44127