还原清理和终止概述
还原后,编写器检查操作的状态,以便他们可以使用还原的数据并处理错误。 请求者必须等待此活动完成。 有关详细信息,请参阅 在 VSS 下处理还原的概述。
下表显示了执行还原操作后所需的操作和事件序列。
请求者操作 | 事件 | 编写器操作 |
---|---|---|
请求者指示还原结束 (请参阅 IVssBackupComponents::P ostRestore) 。 | PostRestore | 编写器执行还原后清理,并处理还原失败和已还原到非标准位置的文件 (请参阅 CVssWriter::OnPostRestore, IVssComponent) 。 |
请求者等待编写器使用 IVssAsync 处理 PostRestore 事件。 它还应验证编写器状态 (请参阅 IVssBackupComponents::GatherWriterStatus、 IVssBackupComponents::GetWriterStatus) 。 | 无 | 无 |
请求者释放 IVssBackupComponents 接口。 | 无 | 无 |
清理和终止期间的请求者操作
此时,请求者通过调用 IVssBackupComponents::P ostRestore 生成 PostRestore 事件来指示其文件还原活动的结束。
请求者的操作仅限于等待编写器,这可能需要执行一些最终清理并处理还原错误,并在所有编写器从处理 PostRestore 事件返回后释放 IVssBackupComponents 接口。
清理和终止期间的编写器操作
PostRestore 事件由虚拟方法 CVssWriter::OnPostRestore 处理。 默认实现仅返回 true ,而不执行任何操作。 如果编写器需要对还原后的情况执行更多控制,它可以替代此方法。
除了任何正常的清理 ((例如删除编写器可能在 CVssWriter::OnPostRestore 中执行的临时文件) ),还可以处理还原操作的成功或失败。
如何处理还原错误、将文件还原到备用位置以及将来需要还原完全由编写器决定。 典型操作可能包括将备用位置或新位置的文件与当前正在使用的文件进行比较、合并多个文件中的数据,或启动连接到新数据文件的新会话。 VSS 提供以下机制来逐个组件支持此功能:
- 可通过 IVssComponent::GetFileRestoreStatus 找到还原任何组件的成功或失败。
- IVssComponent::GetAlternateLocationMapping 将指示在还原文件时使用备用位置映射。
- 通过调用 IVssComponent::GetAdditionalRestores 来确定还原是否为增量还原并需要进一步还原。 在此方法返回 false 之前,需要完全还原其数据的编写器不应重启。
- 编写器可以确定请求者是否需要使用 IVssComponent::GetNewTargetCount 和 IVssComponent::GetNewTarget 将文件还原到以前未指定的位置
(有关将文件还原到非默认位置的详细信息,请参阅 非默认备份和还原位置。)
与任何 IVssComponent 方法一样,给定实例返回的信息适用于为备份 显式包含 的组件及其隐 式包含 的备份子组件,包括请求者使用 IVssBackupComponents::AddRestoreSubcomponent (请参阅 使用适用于还原和子组件的可选择性) 。
由于编写器需要访问备份组件文档,因此,在编写器完成处理之前,请求者不要释放 IVssBackupComponents 接口,这一点很重要。