准备还原概述
在准备还原时,请求者将存储的编写器元数据文档与其自己检索到的备份组件文档结合使用,以确定要还原的内容和还原方式。 有关详细信息,请参阅 VSS 下处理还原的概述。
选择还原候选组件后,当前在系统上运行的编写器将访问请求者的备份组件文档。 编写器使用此访问权限来指示如何使由于还原而导致运行服务的最低难度。
完成此操作后,请求者将有足够的信息来确定需要还原哪些文件,以及应还原这些文件的位置和方式。 (有关详细信息,请参阅 生成还原集。)
下表显示了准备还原操作所需的操作和事件序列。
请求者操作 | 事件 | 编写器操作 |
---|---|---|
从备份组件文档中检索有关 备份操作中显式包含 的组件的信息 (请参阅 IVssBackupComponents::GetWriterComponents) 检查检索到的编写器元数据文档,以获取有关备份中显式包含的这些组件的详细信息,以及任何找到 的隐式包含 的子组件。 (请参阅 IVssExamineWriterMetadata、 IVssWMComponent.) |
无 | 无 |
选择要还原的组件和组件集 (请参阅 IVssBackupComponents::SetSelectedForRestore 和 IVssBackupComponents::AddRestoreSubcomponent.) | 无 | 无 |
请求者允许编写器更新备份组件文档,并可以选择将任何特殊还原选项传达给编写器。 (请参阅 IVssBackupComponents::SetRestoreOptions、 IVssBackupComponents::AddNewTarget 和 IVssBackupComponents::P reRestore.) | PreRestore | 编写器确定是否参与还原,准备要还原的文件,并根据需要选择性地修改备份组件文档。 (请参阅 CVssWriter::OnPreRestore、 IVssComponent、 IVssComponent::IsSelectedForRestore、 IVssComponent::GetRestoreOptions、 IVssComponent::SetRestoreTarget、 IVssComponent::SetRestoreMetadata、 IVssComponent::AddDirectedTarget.) |
请求者等待编写器使用 IVssAsync 处理 PreRestore 事件。 它还应验证编写器状态。 (请参阅 IVssBackupComponents::GatherWriterStatus、 IVssBackupComponents::GetWriterStatus.) | 无 | 无 |
还原准备期间的请求者操作
若要确定哪些组件是还原的候选组件,请求者必须执行以下操作:
- 建立用于进行备份的 组件和组件集 结构。
- 检查组件的 可还原性。
- 使用选择性指南 (使用选择性还原和子组件) 选择要包括的组件。
- 使用组件 文件集 信息确定备份介质上的哪些文件必须还原。
为此,请求者需要检查存储的备份组件文档中 显式包含 的组件。 此组件信息使用 IVssBackupComponents::GetWriterComponents 逐个编写器提供,后者返回 IVssWriterComponentsExt 接口的实例,可以从该接口检索编写器信息和 IVssComponent 接口的实例。
如 请求者) 使用组件 (其他地方所述,备份组件文档和 IVssComponent 接口不包含足够的信息来支持备份。 因此,请求者必须使用 IVssExamineWriterMetadata 检查相应的存储的编写器元数据文档, (请参阅 编写器标识信息) 。
每个编写器管理的组件数由 IVssExamineWriterMetadata::GetFileCounts 返回。 然后,请求者可以使用 IVssExamineWriterMetadata::GetComponent 获取编写器管理的每个组件的 IVssWMComponent 接口。
通过检查组件的备份和逻辑路径的可选择性 (请参阅使用选择性和逻辑路径) ,请求者能够识别定义备份时组件集的组件 (显式包含的组件) ,这些集的子组件成员 (隐式包含的组件) 。
请求者通过备份组件文档指示是否要使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponent 来显式还原组件。 方法的选择将取决于组件最初备份的方式及其 还原的可选项。 这些显式包含用于还原的组件指定隐式包含的其他组件 (请参阅 使用还原和子组件的可选择性) 。
使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponents::AddRestoreSubcomponent,请求者可以显式包含当前正在执行的编写器组件。 在这种情况下,该编写器在还原操作的剩余时间内不会收到任何 VSS 事件。
显式使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponent 选择当前未运行的编写器的组件将返回VSS_E_OBJECT_NOT_FOUND错误。 有关还原缺失编写器的数据的信息,请参阅 在未参与 编写器的情况下还原。
若要使编写器能够获取要执行操作的完整信息,可以分别通过请求者调用 IVssBackupComponents::SetRestoreOptions 和 IVssBackupComponents::SetAdditionalRestores,向编写器发送特定于编写器的还原选项和增量还原指示。
此时,请求者已完成其准备,它通过调用 IVssBackupComponents::P reRestore 生成 PreRestore 事件,允许编写器为实际还原做好准备。
还原准备期间的编写器操作
使用虚拟方法 CVssWriter::OnPreRestore 处理 PreRestore 事件时,将发生还原操作的编写器准备。 默认实现仅返回 ,不执行任何操作。 编写者可以选择替代默认实现,以通过以下方式执行更多控制:
事件处理程序 CVssWriter::OnPreRestore 接收 IVssWriterComponents 的实例,从该实例中,它可以获取备份期间备份组件文档中显式包含在备份组件文档中的组件的 IVssComponent 接口。
有关子组件的信息隐式包含在备份操作中,并且通过使用与定义其备份组件集的组件对应的 IVssComponent 实例显式包含在还原 中。
IVssComponent::IsSelectedForRestore 方法用于确定是否要还原备份组件的显式包含。
若要确定备份子组件是否显式包含在还原中,编写器使用 IVssComponent::GetRestoreSubcomponent。
编写器应检查每个组件中的 文件集 ,并确定它是否需要采取措施来支持还原。 编写器需要评估是否要覆盖其当前文件,或者是否需要还原到新位置。 操作可以包括以下内容:
- 获取和操作任何特定于编写器或请求者的选项来管理还原操作 (请参阅 IVssComponent::GetRestoreOptions)
- 关闭并创建任何当前打开的文件可写
- 例如,更新还原目标 (强制还原到备用位置映射) 。 请参阅 IVssComponent::SetRestoreTarget。
- 通过专用元数据与请求者通信 (请参阅 IVssComponent::SetRestoreMetadata)
- 指示应通过 定向目标 定义重新映射来还原文件 (请参阅 IVssComponent::AddDirectedTarget)
使用的 IVssComponent 实例将由备份期间组件的显式包含在备份组件文档中创建的实例,或者是定义备份组件集的组件实例 (请参阅 使用适用于还原和子组件的选择性) 。