无法使用SQL Server VSS Writer进行差异备份

时间:2011-04-07 01:39:01

标签: c++ sql-server shadow-copy volume-shadow-service

我一直在尝试开发一个使用SQL Server VSS Writer备份/恢复MS SQL Server的工具。我不能让不同的备份工作!我只是好奇是否有人使用VSS进行差异备份。这是我一直在做的事情:

  1. 创建完整备份和存储文件以及与之关联的备份组件文档。
  2. 更新数据库中的表格。
  3. 通过将“ SetBackupState ”设置为 VSS_BT_DIFFERENTIAL
  4. 来创建新备份
  5. 现在,在将现有组件添加到备份组件文档时,我在步骤1中从文档中找到组件的时间戳,然后使用“ SetPreviousBackupStamp
  6. 调用它
  7. 现在拍摄快照后,我会浏览每个组件并调用“ GetPartialFileCount ”API。这总是返回值0.我假设如果现有组件发生了变化,它应该给出一个大于0的值。
  8. 我在这里遗漏了什么吗?我们是否需要使用某些参数或其他东西启动SQL Server VSS Writer?我尝试了不同的配置,包括(Windows Server 2008 / SQL Server 2008)

1 个答案:

答案 0 :(得分:2)

我一直希望更新这篇文章一段时间,但却被我在程序中发现的所有错误所束缚。来自微软的几个人帮我解决了我的问题。我只是想感谢Dileep和Ramesh(我出于显而易见的原因遗漏了他们的姓),以帮助我度过难关。

以下是我的发现:

  • SQL VSS Writer支持差异备份。

  • 进行差异备份时,请不要将“master”组件作为备份组件。

  • 使用以下API序列始终检查每个阶段后的Writer状态错误:GatherWriterStatus(),GetWriterStatusCount(),GetWriterStatus()

  • 如果作者状态指向错误,那么事情是不可预测的。

  • 开始寻找工作的最佳位置是作为VSS SDK的一部分提供的BETest源代码。

  • BETest允许备份单个数据库(完整/差异)和恢复(完整/差异),只要您正确获得/ C选项即可。组件语法为:“{Writer Id}”:“完整组件名称” 例如,对于我机器上的数据库“Person”,我的组件信息文件包含: “{A65FAA63-5EA8-4EBC-9DBD-A0C4DB26912A}”: “ABP-PC \ SQLEXPRESS \人”;

  • 进行差异还原时,需要使用“/ AdditionalRestores”选项完成完全还原。

希望这会有所帮助。如果有人需要帮助,请更新此帖子,我会收到通知。我会帮忙。