准备还原的概述

在准备还原时,请求者将存储的编写器元数据文档与自己检索的备份组件文档结合使用,以确定要还原的内容以及如何还原。 有关详细信息,请参阅 VSS 下处理还原的概述

选择还原候选组件后,系统当前运行的编写器访问请求者的备份组件文档。 编写器使用此访问权限来指示如何因还原而导致运行服务的最低难度。

完成此操作后,请求方有足够的信息来确定需要还原哪些文件,以及还原文件的位置和方式。 (有关详细信息,请参阅 生成还原集.)

下表显示了准备还原操作所需的操作和事件序列。

请求者操作 事件 编写器操作
从备份组件文档中检索有关备份操作中显式包含的组件的信息, (请参阅 IVssBackupComponents::GetWriterComponents) 检查检索的编写器元数据文档,以获取有关这些组件在备份中显式包含的详细信息,以及任何隐式包含的子组件。 (请参阅 IVssExamineWriterMetadataIVssWMComponent.)
选择要还原的组件和组件集 (请参阅 IVssBackupComponents::SetSelectedForRestoreIVssBackupComponents::AddRestoreSubcomponent.)
请求者允许编写器更新备份组件文档,并且可以选择性地将任何特殊的还原选项传达给编写器。 (请参阅 IVssBackupComponents::SetRestoreOptionsIVssBackupComponents::AddNewTargetIVssBackupComponents::P reRestore.) PreRestore 编写器确定参与还原、准备要还原的文件,并根据需要根据需要修改备份组件文档。 (请参阅 CVssWriter::OnPreRestoreIVssComponent、IVssComponent::IsSelectedForRestoreIVssComponent::GetRestoreOptionsIVssComponent::SetRestoreTargetIVssComponent::SetRestoreMetadataIVssComponent::AddDirectedTarget.)
请求方等待编写器使用 IVssAsync 处理 PreRestore 事件。 它还应验证编写器状态。 (请参阅 IVssBackupComponents::GatherWriterStatusIVssBackupComponents::GetWriterStatus.)

 

在还原准备期间请求者操作

若要确定哪些组件是还原的候选组件,请求者必须执行以下操作:

为此,请求方需要检查存储的备份组件文档中的显式包含的组件。 此组件信息使用 IVssBackupComponents::GetWriterComponents(返回 IVssWriterComponentsExt 接口的实例)在编写器信息与 IVssComponentsExt 接口的编写器信息和实例的基础上可用。

如请求者 () 使用组件的其他位置所述,备份组件文档和 IVssComponent 接口不包含足够的信息来支持备份。 因此,请求者必须使用 IVssExamineWriterMetadata 检查相应的存储的编写器元数据文档, (请参阅 编写器标识信息) 。

每个编写器管理的组件数由 IVssExamineWriterMetadata::GetFileCounts 返回。 然后,请求者可以使用 IVssExamineWriterMetadata::GetComponent 获取编写器管理的每个组件的 IVssWMComponent 接口。

通过检查组件对备份和逻辑路径可选择性 () 查看“使用可选择性和逻辑路径”,请求者能够识别定义备份时组件集的组件 (显式包含的组件) ,以及这些集的子组件成员 (隐式包含的组件) 。

请求者使用 IVssBackupComponents::SetSelectedForRestore 或 IVssBackupComponents::AddRestoreSubcomponents::AddRestoreSubcomponent,通过备份组件文档指示。 方法的选择取决于组件最初备份的方式及其 还原的可选择性。 为还原显式包含的这些组件指定隐式包含的其他组件 (请参阅 “使用还原的可选择性”和“子组件 ”以获取详细信息) 。

请求者可能显式包含当前执行编写器的组件,以便使用 IVssBackupComponents::SetSelectedForRestoreIVssBackupComponents::AddRestoreSubcomponent 进行还原。 在这种情况下,该编写器不会接收还原操作其余部分的任何 VSS 事件。

显式使用 IVssBackupComponents::SetSelectedForRestoreIVssBackupComponents::AddRestoreSubcomponents::AddRestoreSubcomponent 选择当前未运行的编写器组件返回VSS_E_OBJECT_NOT_FOUND错误。 有关还原缺失编写器数据的信息,请参阅 “没有编写器参与的还原 ”。

若要使编写器能够获取操作的完整信息,可以通过请求方调用 IVssBackupComponents::SetRestoreOptions::SetRestoreUpComponents::SetAdditionalRestores 分别向编写器发送特定于编写器的还原选项和指示。

此时,请求者已完成其准备,并通过调用 IVssBackupComponents::P reRestore 生成 PreRestore 事件,使编写器能够准备实际还原。

在还原准备期间编写器操作

使用虚拟方法 CVssWriter::OnPreRestore 处理 PreRestore 事件时,将发生还原操作的编写器准备。 默认实现只需返回而不执行任何操作。 编写器可以选择重写默认实现,以通过以下方式执行更多控制:

事件处理程序 CVssWriter::OnPreRestore 接收 IVssWriterComponents 的实例,可以从该实例中获取其组件在备份期间显式包含在备份组件文档中的这些组件的 IVssComponent 接口。

有关备份操作中隐式包含的子组件的信息,并使用与定义其备份组件集的组件对应的 IVssComponent 实例显式包含在还原中。

IVssComponent::IsSelectedForRestore 方法用于确定是否要还原备份组件的显式包含。

若要确定备份子组件是否已显式包含在还原中,编写器使用 IVssComponent::GetRestoreSubcomponent

编写器应检查每个组件中的 文件集 ,并确定它是否需要采取措施来支持还原。 编写器需要评估它是否希望覆盖其当前文件,或者是否需要还原到新位置。 操作可以包括以下内容:

使用的 IVssComponent 实例要么是由组件在备份期间显式包含在备份组件文档中创建的,要么是定义其成员的备份组件集的组件, (看到“使用可选择性还原”和“子组件”) 。