Capacidade de seleção e trabalhar com propriedades de componente
Trabalhar com componentes selecionados implicitamente requer acesso aos documentos de documentos de componentes de backup e de metadados do gravador.
Há dois motivos para isso:
- Os dados do componente armazenados no Documento de Componentes de Backup (representado pela interface IVssComponent ) não têm acesso às informações do conjunto de arquivos de componentes: especificação de arquivo, caminho e sinalizador de recursão. (Consulte Trabalhando com o documento componentes de backup.)
- Somente os componentes incluídos explicitamente no Documento de Componentes de Backup durante o backup têm suas informações armazenadas diretamente no Documento de Componentes de Backup. Os solicitantes e gravadores devem usar as informações disponíveis por meio da interface IVssComponent , em conjunto com informações de caminho lógico e Documentos de Metadados do Gravador para obter informações sobre e definir propriedades de componentes incluídos implicitamente .
O caso "MyWriter" discutido no Caminho Lógico dos Componentes pode ser usado para ilustrar a selebilidade do backup.
Nome do Componente | Caminho lógico | Selecionável para backup | Selecionável para restauração | Explicitamente incluído |
---|---|---|---|---|
"Executáveis" | "" | N | N | S |
"ConfigFiles" | "Executáveis" | N | N | S |
"LicenseInfo" | "" | S | N | S |
“Segurança” | "" | S | N | S |
"UserInfo" | “Segurança” | N | N | N |
"Certificados" | “Segurança” | N | N | N |
"writerData" | "" | S | S | S |
"Set1" | "writerData" | N | S | N |
"Jan" | "writerData\Set1" | N | N | N |
"Dez" | "writerData\Set1" | N | N | N |
"Set2" | "writerData" | N | S | N |
"Jan" | "writerData\Set2" | N | N | N |
"Dez" | "writerData\Set2" | N | N | N |
"Consulta" | "writerData\QueryLogs" | N | N | N |
"Uso" | "writerData" | S | S | N |
"Jan" | "writerData\Usage" | N | N | N |
"Dez" | "writerData\Usage" | N | N | N |
Componentes incluídos implicitamente no conjunto de backup
Ao examinar o Documento de Metadados do Gravador de um gravador (consulte IVssBackupComponents::GetWriterMetadata) durante o backup, um solicitante deve armazenar uma lista de todos os componentes, seus caminhos lógicos e suas informações de conjunto de arquivos.
As informações de arquivo definidas e excluídas serão necessárias para determinar uma lista de arquivos para qualquer componente incluído (explicita ou implicitamente).
Para componentes de backup não selecionáveis sem selecionáveis para ancestrais de backup e selecionáveis para componentes de backup que não definem um conjunto de componentes, somente as informações de arquivo definidas e excluídas serão necessárias para identificar todos os candidatos do componente para backup, pois esses componentes não definem subcomponentes.
Para selecionáveis explicitamente incluídos para componentes de backup que definem um conjunto de componentes, o arquivo define e exclui informações de arquivo para o componente definidor e todos os subcomponentes precisam ser usados para selecionar arquivos para backup.
Isso significa que os conjuntos de backup para os componentes "Executáveis", "ConfigFiles" e "LicenseInfo" só podem ser encontrados examinando os metadados do gravador para apenas esses componentes usando suas instâncias da interface IVssWMComponent .
No entanto, se writerData estiver explicitamente incluído no backup, você deve examinar sua instância da interface IVssWMComponent e aquelas para "Set1", "Jan" (com o caminho lógico "writerData\Set1"), "Dec" (com o caminho lógico "writerData\Set1"), "Set2", "Jan" (com caminho lógico "writerData\Set2"), "Dec" (com o caminho lógico "writerData\Set2"), "Query", "Usage", "Jan" (com o caminho lógico "writerData\Usage" e "Dec" (com o caminho lógico "writerData\Usage").
Para fazer isso, um solicitante precisará primeiro identificar que o componente "writerData" (caminho lógico "") é selecionável. Em seguida, ele precisará examinar todos os outros componentes gerenciados pelo gravador para determinar se o primeiro elemento em seu caminho lógico é "writerData". Os componentes que têm "writerData" como os principais membros de seu caminho lógico são identificados como sendo subcomponentes de "writerData" e são implicitamente selecionados quando são explicitamente selecionados.
Na verdade, uma verificação semelhante precisará ser feita para determinar que nenhum componente tem "LicenseInfo" como o membro principal de seu caminho lógico e, portanto, que "LicenseInfo" não tem subcomponentes.
Devido à complexidade desse mecanismo no VSS, muitos gravadores solicitantes podem achar útil criar suas próprias estruturas para armazenar informações de componentes e conjuntos de backup para componentes explicitamente e implicitamente adicionados.
Propriedades de componentes incluídos implicitamente
Durante as operações de restauração e backup, as instâncias das interfaces IVssComponent e IVssBackupComponents são usadas para recuperar informações sobre componentes e para definir ou alterar as propriedades do componente. No entanto, somente os componentes explicitamente incluídos terão instâncias da interface IVssComponent ou estarão acessíveis para a interface IVssBackupComponents .
Algumas propriedades são de todo o conjunto de componentes no escopo. Essas propriedades incluem o seguinte:
- Backup e restauração status:
IVssBackupComponents::SetBackupSucceeded
IVssComponent::GetBackupSucceededed
IVssBackupComponents::SetFileRestoreStatus
IVssComponent::GetFileRestoreStatus
- Opções de backup e restauração:
IVssBackupComponents::SetBackupOptions
IVssComponent::GetBackupOptions
IVssBackupComponents::SetRestoreOptions
IVssComponent::GetRestoreOptions
- Mensagens de falha:
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
- Destinos de restauração:
IVssComponent::SetRestoreTarget
IVssComponent::GetRestoreTarget
- Carimbos de backup:
IVssComponent::SetBackupStamp
IVssComponent::GetBackupStamp
- Metadados adicionais:
IVssComponent::SetRestoreMetadata
IVssComponent::GetRestoreMetadata
IVssComponent::SetBackupMetadata
IVssComponent::GetBackupMetadata
Portanto, você usa a instância da interface IVssComponent do membro definidor de um conjunto de componentes ou usa o nome, o tipo e o caminho lógico do membro definidor com um método IVssBackupComponents para definir ou recuperar propriedades para todos os membros do conjunto de componentes.
Por esse motivo, os conjuntos de componentes são tratados como unidades. Por exemplo, um backup de um conjunto de componentes só será bem-sucedido se o backup de todos os conjuntos de arquivos de todos os seus componentes for bem-sucedido.
No exemplo anterior, suponha que um arquivo no componente "Jan" (com o caminho lógico "writerData\Set2") seja um membro do conjunto de componentes definido por "writerData". Se um dos arquivos de "Jan" não fizer backup, um solicitante usará as informações de "writerData" (seu nome "writerData", seu caminho "" e seu tipo de componente) como argumentos ao definir IVssBackupComponents::SetBackupSucceeded com false para indicar a falha do conjunto de componentes.
Da mesma forma, o estado retornado por IVssComponent::GetBackupSucceeded para a instância de "writerData" da interface IVssComponent aplica-se não apenas a "writerData", mas a todos os seus subcomponentes também.
Além disso, se um gravador optar por alterar o destino de restauração usando IVssComponent::SetRestoreTarget da instância de "writerData" de IVssComponent, isso alterará o destino de restauração para todos os conjuntos de arquivos de todos os subcomponentes de "writerData".
As propriedades a seguir não se aplicam a todos os componentes, mas a arquivos ou conjuntos de arquivos específicos:
- Mapeamentos de localização alternativos:
IVssBackupComponents::AddAlternativeLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssComponent::GetAlternateLocationMappingCount
- Arquivos diferenciados:
IVssComponent::AddDifferencedFilesByLastModifyTime
IVssComponent::GetDifferencedFile
IVssComponent::GetDifferencedFilesCount
- Arquivos parciais:
IVssComponent::AddPartialFile
IVssComponent::GetPartialFile
IVssComponent::GetPartialFileCount
- Destinos direcionados:
IVssComponent::AddDirectedTarget
IVssComponent::GetDirectedTarget
IVssComponent::GetDirectedTargetCount
- Novos destinos:
IVssBackupComponents::AddNewTarget
IVssComponent::GetNewTarget
IVssComponent::GetNewTargetCount
Quando um solicitante acessa esses recursos para um subcomponente usando a interface IVssBackupComponents , ele usa as informações de componente para o componente de definição do conjunto de componentes, mas as informações do arquivo ou do conjunto de arquivos para o subcomponente.
Da mesma forma, se a propriedade estiver acessível por meio da interface IVssComponent , a instância correspondente ao subcomponente definidor será usada, mas os argumentos do arquivo ou do conjunto de arquivos serão retirados do subcomponente.
Por exemplo, suponha que o subcomponente "Jan" (com o caminho lógico "writerData\Set2") tinha um arquivo definido com um caminho de "c:\fred", uma especificação de arquivo de "*.dat" e um sinalizador recursivo de true pode ter que ser restaurado para um local alternativo.
Se esse fosse o caso, um solicitante chamaria IVssBackupComponents::AddAlternativeLocationMapping, usando as informações de "writerData" (tipo de componente, um nome de componente de "writeData" e um caminho lógico de "") juntamente com as informações do conjunto de arquivos de "Jan" (caminho "c:\fred", especificação de arquivo "*.dat" e recursão igual a true).
Observe que, nesse caso, as informações do conjunto de arquivos devem corresponder exatamente às informações do conjunto de arquivos usadas por IVssCreateWriterMetadata::AddFilesToFileGroup, IVssCreateWriterMetadata::AddDatabaseFiles ou IVssCreateWriterMetadata::AddDatabaseLogFiles para adicionar arquivos a Jan.
Da mesma forma, se um gravador quisesse adicionar um destino direcionado a um arquivo com um caminho de "c:\ire" e nome "lucy.dat" gerenciado por "Jan" (com o caminho lógico "writerData\Set2"), ele usaria a instância IVssComponent correspondente a "writerData", mas as informações de arquivo de "Jan".
Componentes incluídos implicitamente no conjunto de restauração
Os componentes que foram incluídos implicitamente em um backup poderão ser incluídos explicitamente em uma restauração se forem selecionáveis para restauração. Conforme observado em Trabalhando com a selebilidade para restauração e subcomponentes, esses componentes são adicionados ao Documento de Componentes de Backup usando o método IVssBackupComponents::AddRestoreSubcomponent .
No entanto, isso não cria uma nova instância da interface IVssComponent , nem o componente é diretamente acessível por meio da interface IVssBackupComponents .
Em vez disso, um componente explicitamente incluído para restauração, mas implicitamente incluído para backup, deve ser acessado por meio de uma instância da interface IVssComponent correspondente ao componente que definiu o conjunto de componentes do qual ele era membro no backup.
Por exemplo, para incluir explicitamente para restaurar "Set1", um subcomponente do selecionável para o componente de backup "writerData", você obteria informações sobre ele chamando o método IVssComponent::GetRestoreSubcomponent da instância de "writerData" da interface IVssComponent .