Trabajar con ubicaciones alternativas durante la restauración
Hay muchas razones por las que un solicitante no debe, o no, poder restaurar archivos desde medios de copia de seguridad a su ubicación original. Por ejemplo, un método de restauración o un destino pueden requerir dicha restauración, o la ubicación de restauración actual puede estar ocupada y sin escribir.
Para controlar estos casos, un escritor puede haber definido una asignación de ubicación alternativa, un destino de restauración no estándar que se usará para circunstancias especiales.
El término asignación de ubicación alternativa, como se usa con VSS, no debe confundirse con el término ruta de acceso alternativa. Las asignaciones de ubicación alternativas solo se usan durante las operaciones de restauración y hacen referencia a un destino alternativo para las operaciones de restauración. Las rutas de acceso alternativas solo se usan durante las operaciones de copia de seguridad y hacen referencia a un origen alternativo desde el que realizar una copia de seguridad.
Para usar asignaciones de ubicación alternativas durante la restauración, un solicitante haría lo siguiente (normalmente después de la generación de un evento PreRestore ):
Con una instancia de la interfaz IVssExamineWriterMetadata obtenida recuperando un escritor almacenado, un solicitante usa el método IVssExamineWriterMetadata::GetAlternateLocationMapping para obtener las asignaciones de ubicación alternativas de un escritor como instancias de la interfaz IVssWMFiledesc .
Nota
El solicitante usa IVssExamineWriterMetadata::GetAlternateLocationMapping, no IVssComponent::GetAlternateLocationMapping. El primero devuelve esas asignaciones de ubicación alternativas disponibles para su uso por parte de un solicitante. Este último se usa para indicar esas asignaciones de ubicación alternativas que usa realmente un solicitante.
La llamada a IVssExamineWriterMetadata::GetAlternateLocationMapping devuelve una instancia de la interfaz IVssWMFiledesc . Esta instancia contiene información del conjunto de archivos: una ruta de acceso especificada por IVssWMFiledesc::GetPath, una especificación de archivo devuelta a través de IVssWMFiledesc::GetFilespec y una marca de recursividad obtenida de IVssWMFiledesc::GetRecursive, que coincide con uno de los conjuntos de archivos agregados (mediante IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterBaseLogFiles o IVssCreateWriterMetadata::AddFilesToFileGroup ) a uno de los componentes administrados por el escritor.
El valor devuelto por IVssWMFiledesc::GetAlternateLocation es la asignación de ubicación alternativa para este conjunto de archivos.
Las asignaciones de ubicación alternativas no contienen información de componentes, por lo que será necesario comparar la información del conjunto de archivos (ruta de acceso, especificación de archivo y marca de recursividad) obtenida mediante una llamada a IVssExamineWriterMetadata::GetAlternateLocationMapping a la contenida en los componentes del escritor.
Esta información se puede encontrar iterando en los componentes del escritor y llamando a IVssExamineWriterMetadata::GetComponent para obtener una instancia de la interfaz IVssWMComponent y usar IVssWMComponent::GetFile para obtener una instancia de IVssWMFiledesc que contiene la información del conjunto de archivos de componentes.
Cuando la información del conjunto de archivos devuelta por la instancia de IVssWMFiledesc obtenida de IVssExamineWriterMetadata::GetComponent e IVssWMComponent::GetFile coincide con la obtenida de la instancia de IVssWMFiledesc derivada de IVssWMFiledesc::GetAlternateLocation, se ha encontrado el componente que administra los archivos con la asignación de ubicación alternativa específica.
Después de haber localizado el componente, el solicitante puede determinar las condiciones en las que se debe usar una asignación de ubicación alternativa haciendo lo siguiente:
Examinar el método de restauración del componente, que se obtiene mediante una llamada a IVssExamineWriterMetadata::GetRestoreMethod.
Comprobar si un destino de restauración invalida el método de restauración mediante una llamada a IVssComponent::GetRestoreTarget.
Si el componente encontrado en el documento de metadatos del escritor se había incluido explícitamente en la copia de seguridad, la instancia de la interfaz IVssComponent corresponderá a ese componente. Si el componente se ha incluido implícitamente en la copia de seguridad, la instancia de IVssComponent corresponderá al componente que define el conjunto de componentes del que el componente del documento de metadatos de escritor es un subcomponente.
Con esta información, el solicitante puede determinar por componente si necesita restaurar un conjunto de archivos determinado de un componente determinado en un destino definido por la asignación de ubicación alternativa.
Cuando se usa una asignación de ubicación alternativa, el solicitante respeta el descriptor de archivo del conjunto de archivos y la marca recursiva y usa la ruta de acceso proporcionada por la asignación de ubicación alternativa.
El solicitante indica que ha usado una asignación de ubicación alternativa durante una operación de restauración mediante una llamada a IVssBackupComponents::AddAlternativeLocationMapping con la información de ubicación predeterminada del conjunto de archivos, el destino de restauración alternativo usado y un nombre de componente.
Si el conjunto de archivos se administra mediante un componente que se incluyó explícitamente en la copia de seguridad, se usará ese nombre de componente. Si un componente que se incluyó implícitamente en la copia de seguridad administra el conjunto de archivos, el nombre usado será el del componente que define el conjunto de componentes del que el componente que administra el conjunto de archivos es un subcomponente.
Los escritores comprueban si los conjuntos de archivos de uno de sus componentes se restauraron en una asignación de ubicación alternativa mediante una llamada a IVssComponent::GetAlternateLocationMapping.