在还原期间使用备用位置
请求者不应或可能无法将文件从备份介质还原到其原始位置的原因有很多。 例如,还原方法或目标可能需要此类还原,或者当前还原位置可能已占用且不可写。
为了处理此类情况,编写器可能已定义 备用位置映射,即用于特殊情况的非标准还原目标。
与 VSS 一起使用的术语“备用位置映射”不应与 术语“备用路径”混淆。 备用位置映射仅在还原操作期间使用,并引用还原操作的备用目标。 备用路径仅在备份操作期间使用,并引用要从中备份的备用源。
若要在还原期间使用备用位置映射,请求者通常会在生成 PreRestore 事件) 后执行以下 (:
使用通过检索存储的编写器获取的 IVssExamineWriterMetadata 接口的实例,请求者使用 IVssExamineWriterMetadata::GetAlternateLocationMapping 方法获取编写器作为 IVssWMFiledesc 接口实例的备用位置映射。
注意
请求者使用 IVssExamineWriterMetadata::GetAlternateLocationMapping,而不是 IVssComponent::GetAlternateLocationMapping。 前者返回可供请求者使用的备用位置映射。 后者用于指示请求者实际使用的备用位置映射。
调用 IVssExamineWriterMetadata::GetAlternateLocationMapping 将返回 IVssWMFiledesc 接口的实例。 此实例包含文件集信息 - IVssWMFiledesc::GetPath 指定的路径,通过 IVssWMFiledesc::GetFilespec 返回的文件规范, 以及从 IVssWMFiledesc::GetRecursive 获取的递归标志,匹配使用 IVssCreateWriterMetadata::AddDatabaseFiles、 IVssCreateWriterMetadata::AddDatabaseLogFiles 或 IVssCreateWriterMetadata::AddFilesToFileGroup (添加的文件集之一) 编写器管理的组件之一。
IVssWMFiledesc::GetAlternateLocation 返回的值是此文件集的备用位置映射。
备用位置映射不包含组件信息,因此有必要将文件集信息 (路径、文件规范和递归标志) 调用 IVssExamineWriterMetadata::GetAlternateLocationMapping 与编写器组件所包含的信息进行比较。
可以通过循环访问编写器的组件并调用 IVssExamineWriterMetadata::GetComponent 来获取 IVssWMComponent 接口的实例,并使用 IVssWMComponent::GetFile 获取包含组件文件集信息的 IVssWMFiledesc 实例来找到此信息。
当从 IVssExamineWriterMetadata::GetComponent 和 IVssWMComponent::GetFile 获取的 IVssWMFiledesc 实例返回的文件集信息与从 IVssWMFiledesc::GetAlternateLocation 派生的 IVssWMFiledesc 实例中获取的信息匹配时,已找到使用特定备用位置映射管理文件的组件。
找到组件后,请求者可以通过执行以下操作来确定应在哪些条件下使用备用位置映射:
检查组件的还原方法,该方法是通过调用 IVssExamineWriterMetadata::GetRestoreMethod 获取的。
通过调用 IVssComponent::GetRestoreTarget 检查还原目标是否替代还原方法。
如果在编写器元数据文档中找到的组件已 显式包含在 备份中,则 IVssComponent 接口的实例将对应于该组件。 如果组件已 隐式包含在 备份中,则 IVssComponent 的实例将对应于定义组件集的组件集,编写器元数据文档中的组件是子组件。
利用此信息,请求者可以逐个组件确定是否需要将给定组件的文件集还原到备用位置映射定义的目标。
使用备用位置映射时,请求者会遵循文件集的文件描述符和递归标志,并使用备用位置映射提供的路径。
请求者使用文件集的默认位置信息、使用的备用还原目标和组件名称调用 IVssBackupComponents::AddAlternativeLocationMapping 来指示它在还原操作期间使用了备用位置映射。
如果文件集由备份中显式包含的组件管理,则将使用该组件名称。 如果文件集由备份中隐式包含的组件管理,则使用的名称将是定义组件集的组件的名称,而管理文件集的组件是其子组件。
编写器通过调用 IVssComponent::GetAlternateLocationMapping 验证是否将其中一个组件中的文件集还原到备用位置映射。