Trabalhando com locais alternativos durante a restauração
Há muitos motivos pelos quais um solicitante não deve, ou não, ser capaz de restaurar arquivos da mídia de backup para seu local original. Por exemplo, um método ou destino de restauração pode exigir essa restauração ou o local de restauração atual pode estar ocupado e inequível.
Para lidar com esses casos, um gravador pode ter definido um mapeamento de local alternativo, um destino de restauração não padrão a ser usado para circunstâncias especiais.
O termo mapeamento de localização alternativo, conforme usado com VSS, não deve ser confundido com o termo caminho alternativo. Mapeamentos de localização alternativos são usados somente durante operações de restauração e referem-se a um destino alternativo para operações de restauração. Caminhos alternativos são usados somente durante operações de backup e se referem a uma fonte alternativa da qual fazer backup.
Para usar mapeamentos de localização alternativos durante a restauração, um solicitante faria o seguinte (normalmente após a geração de um evento PreRestore ):
Usando uma instância da interface IVssExamineWriterMetadata obtida pela recuperação de um gravador armazenado, um solicitante usa o método IVssExamineWriterMetadata::GetAlternateLocationMapping para obter mapeamentos de localização alternativos de um gravador como instâncias da interface IVssWMFiledesc .
Observação
O solicitante usa IVssExamineWriterMetadata::GetAlternateLocationMapping, não IVssComponent::GetAlternateLocationMapping. O primeiro retorna os mapeamentos de localização alternativos disponíveis para uso por um solicitante. Este último é usado para indicar os mapeamentos de localização alternativos realmente usados por um solicitante.
A chamada para iVssExamineWriterMetadata::GetAlternateLocationMapping retorna uma instância da interface IVssWMFiledesc . Esta instância contém informações de conjunto de arquivos — um caminho especificado por IVssWMFiledesc::GetPath, uma especificação de arquivo retornada por meio de IVssWMFiledesc::GetFilespec, e um sinalizador de recursão obtido de IVssWMFiledesc::GetRecursive — correspondendo a um dos conjuntos de arquivos adicionados (usando IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup ) para um dos componentes gerenciados pelo gravador.
O valor retornado por IVssWMFiledesc::GetAlternateLocation é o mapeamento de localização alternativo para esse conjunto de arquivos.
Mapeamentos de localização alternativos não contêm informações de componente, portanto, será necessário comparar as informações do conjunto de arquivos (caminho, especificação de arquivo e sinalizador de recursão) obtidas chamando IVssExamineWriterMetadata::GetAlternateLocationMapping com as contidas pelos componentes do gravador.
Essas informações podem ser encontradas iterando sobre os componentes do gravador e chamando IVssExamineWriterMetadata::GetComponent para obter uma instância da interface IVssWMComponent e usar IVssWMComponent::GetFile para obter uma instância IVssWMFiledesc que contém as informações do conjunto de arquivos de componente.
Quando as informações do conjunto de arquivos retornadas pela instância de IVssWMFiledescobtidas de IVssExamineWriterMetadata::GetComponent e IVssWMComponent::GetFile correspondem às obtidas da instância IVssWMFiledesc derivada de IVssWMFiledesc::GetAlternateLocation, o componente que gerencia os arquivos com o mapeamento de local alternativo específico foi encontrado.
Tendo localizado o componente , o solicitante pode determinar as condições sob as quais um mapeamento de local alternativo deve ser usado fazendo o seguinte:
Examinando o método de restauração do componente, que é obtido chamando IVssExamineWriterMetadata::GetRestoreMethod.
Verificando se um destino de restauração substitui o método de restauração chamando IVssComponent::GetRestoreTarget.
Se o componente encontrado no Documento de Metadados do Gravador tiver sido incluído explicitamente no backup, a instância da interface IVssComponent corresponderá a esse componente. Se o componente tiver sido incluído implicitamente no backup, a instância de IVssComponent corresponderá ao componente que define o conjunto de componentes do qual o componente no Documento de Metadados do Gravador é um subcomponente.
Com essas informações, o solicitante pode determinar, componente por componente, se precisar restaurar um determinado conjunto de arquivos de um determinado componente para um destino definido pelo mapeamento de localização alternativo.
Ao usar um mapeamento de local alternativo, o solicitante respeita o descritor de arquivo e o sinalizador recursivo do conjunto de arquivos e usa o caminho fornecido pelo mapeamento de localização alternativo.
O solicitante indica que ele usou um mapeamento de local alternativo durante uma operação de restauração chamando iVssBackupComponents::AddAlternativeLocationMapping com as informações de localização padrão do conjunto de arquivos, o destino de restauração alternativo usado e um nome de componente.
Se o conjunto de arquivos tiver sido gerenciado por um componente que foi explicitamente incluído no backup, esse nome de componente será usado. Se o conjunto de arquivos tiver sido gerenciado por um componente que foi incluído implicitamente no backup, o nome usado será o do componente que define o conjunto de componentes do qual o componente que gerencia o conjunto de arquivos é um subcomponente.
Os gravadores verificam se os conjuntos de arquivos de um de seus componentes foram restaurados para um mapeamento de local alternativo chamando IVssComponent::GetAlternateLocationMapping.