在还原期间使用备用位置

请求者不应或可能无法将文件从备份介质还原到其原始位置的原因有很多。 例如,还原方法或目标可能需要此类还原,或者当前还原位置可能占用且不可写入。

为了处理此类情况,编写器可能定义了 备用位置映射,用于特殊情况的非标准还原目标。

与 VSS 一起使用的术语备用位置映射不应与术语 备用路径混淆。 备用位置映射仅在还原操作期间使用,并引用还原操作的备用目标。 备用路径仅在备份操作期间使用,并引用要备份的备用源。

若要在还原期间使用备用位置映射,请求者将执行以下 (通常遵循 预存储 事件生成) :

  1. 使用通过检索存储编写器获取的 IVssExamineWriterMetadata 接口的实例,请求者使用 IVssExamineWriterMetadata::GetAlternateLocationMapping 方法获取编写器的备用位置映射作为 IVssWMFiledesc 接口的实例。

    注意

    请求者使用 IVssExamineWriterMetadata::GetAlternateLocationMapping,而不是 IVssComponent::GetAlternateLocationMapping。 前者返回可供请求者使用的这些备用位置映射。 后者用于指示请求者实际使用的备用位置映射。

     

  2. 调用 IVssExamineWriterMetadata::GetAlternateLocationMapping 将返回 IVssWMFiledesc 接口的实例。 此实例包含文件集信息-IVssWMFiledesc::GetPath 指定的路径,这是通过 IVssWMFiledesc::GetFilespec 返回的文件规范, 和从 IVssWMFiledesc::GetRecursive 获取的递归标志 - 使用 IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseLogFiles::AddDatabaseLogFilesIVssCreateWriterMetadata::AddFilesToFileGroup 添加 (的其中一个文件集匹配) 编写器管理的某个组件。

    IVssWMFiledesc::GetAlternateLocation 返回的值是此文件集的备用位置映射。

  3. 备用位置映射不包含组件信息,因此有必要将文件集信息 (路径、文件规范和递归标志进行比较,) 调用编写器的组件所包含的 IVssExamineWriterMetadata::GetAlternateLocationMapping

    可以通过循环访问编写器的组件并调用 IVssExamineWriterMetadata::GetComponent 来获取 IVssWMComponent 接口的实例,并使用 IVssWMComponent::GetFile 获取包含组件文件集信息的 IVssWMFiledesc 实例来找到此信息。

    当从 IVssExamineWriterMetadata::GetComponentIVssWMComponent::GetFile 从从 IVssWMFiledesc 实例派生自 IVssWMFiledesc::GetAlternateLocationIVssWMFiledesc 实例返回的文件集信息时,已找到使用特定备用位置映射管理文件的组件。

  4. 找到组件后,请求者可以通过执行以下操作来确定应使用备用位置映射的条件:

  5. 使用此信息,请求者可以逐个组件确定它是否需要将给定组件的给定文件集还原到由备用位置映射定义的目标。

  6. 使用备用位置映射时,请求者会尊重文件集的文件描述符和递归标志,并使用备用位置映射提供的路径。

    请求者通过调用 IVssBackupComponents::AddAlternativeLocationMapping 以及文件集的默认位置信息、使用的备用还原目标以及组件名称,指示它在还原操作期间使用了备用位置映射。

    如果文件集由备份中显式包含的组件管理,将使用该组件名称。 如果文件集由备份中隐式包含的组件管理,则使用的名称将是定义管理文件集的组件集的组件集是子组件集。

编写器通过调用 IVssComponent::GetAlternateLocationMapping 验证文件集是否还原到备用位置映射。