生成还原集
还原集是所有要还原的文件及其要还原到的位置的列表。
生成备份文件列表时 (请参阅 生成备份集) ,用于确定要还原的文件以及还原位置的算法必须按 编写器实例执行编写器 实例,并针对每个编写器实例逐个组件执行。
必须将备份介质上的每个文件与管理该文件的组件相关联。 此外,还需要获取管理组件的 还原方法、文件的 还原目标 信息及其 备用位置映射 (如果有任何) ()。
通过检查组件的备份和逻辑路径的可选择性 (请参阅使用选择性和逻辑路径) ,请求者能够确定要还原的备份操作的组件结构。
建立备份的组件结构后,请求者可以在) 获取每个组件 的文件集 信息 (文件规范、路径和递归标志。 然后,请求者可以生成还原集。
需要 部分文件或 定向目标 的文件提供其自己的详细还原说明 (请参阅 非默认备份和还原位置) ,然后可以将其添加到还原集。
为不涉及部分文件操作的文件或 定向目标 生成还原集的典型机制可以执行以下操作:
获取备份介质上的文件列表,包括其原始路径。
通过执行以下操作,标识备份媒体上每个文件的 编写器类 和组件:
对于每个编写器,通过在其所有组件上调用 IVssExamineWriterMetadata::GetComponent (IVssWMComponent) 获取组件信息。
对于每个组件 (,通过调用 IVssWMComponent::GetFile、IVssWMComponent::GetDatabaseFile 和 IVssWMComponent::GetDatabaseFile,获取组件 (包含的每组文件) 信息,具体取决于组件包含的数据类型。
将文件的名称和路径信息与由 IVssWMFiledesc::GetPath、IVssWMFiledesc::GetFilespec 和 IVssWMFiledesc::GetRecursive) 所返回的每 (组文件的文件描述符中包含的路径信息与存储的文件路径信息进行比较,以确定该文件是否是组件的一部分。
注意
应忽略从存储的编写器元数据文档 (即 IVssWMFiledesc::GetAlternateLocation 不返回 NULL) 的组件检索到的文件描述符中的任何备用位置信息。 此备用位置是 备用路径,仅在备份期间使用。
获取备份介质上每个文件的备用映射信息:
- 备用文件映射存储在编写器(而不是组件级别)中,是从 IVssExamineWriterMetadata::GetAlternateLocationMapping 返回的对象 IVssWMFiledesc 获取的。
- 可以通过 IVssWMFiledesc::GetPath、IVssWMFiledesc::GetFiledesc::GetFilespec 和 IVssWMFiledesc::GetFilespec 和 IVssWMFiledesc::GetRecursive,根据 IVssExamineWriterMetadata::GetAlternateLocationMapping 中返回的路径和文件规范来检查文件的路径和名称,从而确定特定文件是否具有备用位置映射。 (如果在备份期间使用了备用路径,则应在此检查处理 restore 时忽略该信息。)
- 如果文件和备用位置映射文件描述符匹配,则使用 IVssExamineWriterMetadata::GetAlternateLocationMapping 返回的 IVssWMFiledesc::GetAlternateLocation 方法查找可将文件还原到的备用位置。
- 以这种方式获取的备用位置映射不一定与 IVssComponent::GetAlternateLocationMapping 从备份组件文档返回的映射一致。 仅当对文件使用备用位置映射时, IVssWMFiledesc::GetAlternateLocation 值才为非空值。
使用此文件和组件信息,可以查询备份组件文档以获取有关每个文件的还原目标、选项和新的还原位置的信息。 此信息可与文件、组件和备用位置的列表结合使用。
可以采用与传统还原操作一致的方式选择不受编写器保护的文件。
此时,请求者应具有需要还原的所有文件的列表,以及有关如何还原这些文件的说明,并且可以基于以下各项开始还原文件:
- 备用位置映射或原始文件位置是否用作还原目标将取决于该目标位置是否存在文件,以及 VSS_RESTORE_TARGET 和 VSS_RESTOREMETHOD_ENUM 的组件设置, (请参阅 非默认备份和还原位置) 。
- 还原尝试是否成功将取决于以下问题:目标的访问权限、目标文件是否已锁定,以及文件还原涉及的其他常规问题。
- 应通过调用 IVssBackupComponents::SetFileRestoreStatus,在备份组件文档中保留为给定编写器实例还原给定组件的成功或失败。 这样,编写者在处理 PostRestore 事件时可以访问这些信息。
- 如果文件还原到备用位置映射,则请求者必须调用 IVssBackupComponents::AddAlternativeLocationMapping。 这将允许编写者确定其文件是否已通过 IVssComponent::GetAlternateLocationMapping 还原到备用位置。
- 请求者可能会发现需要将文件还原到全新的位置。 这是可以接受的,但请求者必须使用 IVssBackupComponents::AddNewTarget 方法向编写器表明这一点。