【问题标题】:Unable to take differential backup using SQL Server VSS Writer无法使用 SQL Server VSS Writer 进行差异备份
【发布时间】:2011-04-07 01:39:00
【问题描述】:
我一直在尝试开发一种工具来使用 SQL Server VSS Writer 备份/恢复 MS SQL Server。我无法让差异备份工作!我只是好奇是否有人曾经使用 VSS 进行过差异备份。这是我一直在做的事情:
- 创建完整备份并存储文件以及与之关联的备份组件文档。
- 更新数据库中的表。
- 通过将“SetBackupState”设置为 VSS_BT_DIFFERENTIAL 创建新备份
- 现在,在将现有组件添加到备份组件文档时,我在步骤 1 中从文档中找到组件的时间戳,然后使用 'SetPreviousBackupStamp'
调用它
- 现在拍摄快照后,我会检查每个组件并调用“GetPartialFileCount”API。这总是返回值 0。我假设如果现有组件发生变化,它应该给出一个大于 0 的值。
我在这里遗漏了什么吗?我们是否需要使用某些参数或其他东西来启动 SQL Server VSS Writer?我尝试了不同的配置,包括(Windows Server 2008/ SQL Server 2008)
【问题讨论】:
标签:
c++
sql-server
shadow-copy
volume-shadow-service
【解决方案1】:
我一直想更新这篇文章,但被我在程序中发现的所有错误所困扰。微软的几个人帮助我解决了我遇到的问题。我只想感谢 Dileep 和 Ramesh(出于显而易见的原因,我省略了他们的姓氏)帮助我度过了难关。
这是我的发现:
SQL VSS Writer 确实支持差异备份。
进行差异备份时,请勿将“主”组件作为备份组件。
始终使用以下 API 序列在每个阶段后检查 Writer 状态错误:GatherWriterStatus()、GetWriterStatusCount()、GetWriterStatus()
如果写入器状态指向错误,那么事情就会变得不可预测。
开始寻找工作的最佳位置是作为 VSS SDK 的一部分提供的 BETest 源代码。
BETest 允许备份单个数据库(完整/差异)和恢复(完整/差异),只要您正确获取 /C 选项。组件语法为:“{Writer Id}”:“完整组件名称”
例如,对于我机器上的数据库“Person”,我的组件信息文件包含:
"{A65FAA63-5EA8-4EBC-9DBD-A0C4DB26912A}":"ABP-PC\SQLEXPRESS\Person";
进行差异还原时,需要使用“/AdditionalRestores”选项进行完整还原。
希望这会有所帮助。如果有人需要帮助,请更新此帖子,我会收到通知。我会帮忙的。