Auswählbarkeit und Arbeiten mit Komponenteneigenschaften
Für das Arbeiten mit implizit ausgewählten Komponenten ist sowohl Zugriff auf das Dokument der Sicherungskomponenten als auch auf die Writer-Metadatendokumente erforderlich.
Hierfür gibt es zwei Gründe:
- Den im Dokument "Sicherungskomponenten" gespeicherten Komponentendaten (dargestellt durch die IVssComponent-Schnittstelle ) fehlt der Zugriff auf Informationen zum Komponentendateisatz – Dateispezifikation, Pfad und Rekursionsflag. (Siehe Arbeiten mit dem Dokument "Sicherungskomponenten".)
- Nur Komponenten, die während der Sicherung explizit im Dokument Sicherungskomponenten enthalten sind, werden ihre Informationen direkt im Dokument Sicherungskomponenten gespeichert. Anforderer und Autoren müssen die über die IVssComponent-Schnittstelle verfügbaren Informationen in Verbindung mit logischen Pfadinformationen und Writer Metadata Documents verwenden, um Informationen über implizit enthaltene Komponenten abzurufen und Eigenschaften festzulegen.
Der Fall "MyWriter", der unter Logische Pfaderstellung von Komponenten erläutert wird, kann verwendet werden, um die Auswahl für die Sicherung zu veranschaulichen.
Komponentenname | Logischer Pfad | Für die Sicherung auswählbar | Für die Wiederherstellung auswählbar | Explizit eingeschlossen |
---|---|---|---|---|
"Ausführbare Dateien" | "" | N | N | J |
"ConfigFiles" | "Ausführbare Dateien" | N | N | J |
"LicenseInfo" | "" | J | N | J |
"Security" | "" | J | N | J |
"UserInfo" | "Security" | N | N | N |
"Zertifikate" | "Security" | N | N | N |
"writerData" | "" | J | J | J |
"Set1" | "writerData" | N | J | N |
"Jan" | "writerData\Set1" | N | N | N |
"Dez" | "writerData\Set1" | N | N | N |
"Set2" | "writerData" | N | J | N |
"Jan" | "writerData\Set2" | N | N | N |
"Dez" | "writerData\Set2" | N | N | N |
"Abfrage" | "writerData\QueryLogs" | N | N | N |
"Nutzung" | "writerData" | J | J | N |
"Jan" | "writerData\Usage" | N | N | N |
"Dez" | "writerData\Usage" | N | N | N |
Implizit enthaltene Komponenten im Sicherungssatz
Beim Untersuchen des Writer-Metadatendokuments eines Writers (siehe IVssBackupComponents::GetWriterMetadata) während der Sicherung sollte ein Anforderer eine Liste aller Komponenten, ihrer logischen Pfade und ihrer Dateisatzinformationen speichern.
Dateisatz- und ausgeschlossene Dateiinformationen werden benötigt, um eine Liste von Dateien für eine (explizit oder implizit) enthaltene Komponente zu ermitteln.
Wenn für Sicherungskomponenten nicht ausgewählt werden kann, die nicht für Sicherungs-Vorgänger ausgewählt werden können und für Sicherungskomponenten ausgewählt werden können, die keinen Komponentensatz definieren, sind nur Dateisatz- und ausgeschlossene Dateiinformationen erforderlich, um alle Kandidaten der Komponente für die Sicherung zu identifizieren, da diese Komponenten keine Unterkomponenten definieren.
Für explizit eingeschlossene Komponenten, die einen Komponentensatz definieren, müssen die Dateiinformationen sowohl für die definierende Komponente als auch für alle Unterkomponenten verwendet werden, um Dateien für die Sicherung auszuwählen.
Dies bedeutet, dass Sicherungssätze für die Komponenten "Executables", "ConfigFiles" und "LicenseInfo" nur gefunden werden können, indem die Writermetadaten nur für diese Komponenten mithilfe ihrer Instanzen der IVssWMComponent-Schnittstelle untersucht werden.
Wenn writerData jedoch explizit in der Sicherung enthalten ist, müssen Sie die instance der IVssWMComponent-Schnittstelle und die für "Set1" untersuchen. "Jan" (mit dem logischen Pfad "writerData\Set1"), "Dec" (mit dem logischen Pfad "writerData\Set1"), "Set2", "Jan" (mit dem logischen Pfad "writerData\Set2"), "Dec" (mit dem logischen Pfad "writerData\Set2"), "Query", "Usage", "Jan" (mit dem logischen Pfad "writerData\Usage") und "Dec" (mit logischem Pfad "writerData\Usage").
Dazu muss ein Anforderer zuerst feststellen, dass die Komponente "writerData" (logischer Pfad "") ausgewählt werden kann. Anschließend müssen alle anderen Komponenten überprüft werden, die vom Writer verwaltet werden, um zu ermitteln, ob das erste Element in ihrem logischen Pfad "writerData" ist. Komponenten, die über "writerData" als führende Member ihres logischen Pfads verfügen, werden als Unterkomponenten von "writerData" identifiziert und implizit ausgewählt, wenn sie explizit ausgewählt wird.
Tatsächlich muss eine ähnliche Überprüfung durchgeführt werden, um festzustellen, dass keine Komponente "LicenseInfo" als führendes Element ihres logischen Pfads aufweist und daher "LicenseInfo" keine Unterkomponenten aufweist.
Aufgrund der Komplexität dieses Mechanismus in VSS finden viele Anforderer es möglicherweise nützlich, eigene Strukturen zum Speichern von Komponenten- und Sicherungssatzinformationen für explizit und implizit hinzugefügte Komponenten zu erstellen.
Eigenschaften implizit eingeschlossener Komponenten
Bei Wiederherstellungs- und Sicherungsvorgängen werden Instanzen der Schnittstellen IVssComponent und IVssBackupComponents sowohl zum Abrufen von Informationen zu Komponenten als auch zum Festlegen oder Ändern von Komponenteneigenschaften verwendet. Allerdings verfügen nur explizit eingeschlossene Komponenten über Instanzen der IVssComponent-Schnittstelle oder sind für die IVssBackupComponents-Schnittstelle zugänglich.
Einige Eigenschaften sind im Bereich komponentensatzweit. Zu diesen Eigenschaften gehören die folgenden:
- Sichern und Wiederherstellen status:
IVssBackupComponents::SetBackupSucceeded
IVssComponent::GetBackupSucceeded
IVssBackupComponents::SetFileRestoreStatus
IVssComponent::GetFileRestoreStatus
- Sicherungs- und Wiederherstellungsoptionen:
IVssBackupComponents::SetBackupOptions
IVssComponent::GetBackupOptions
IVssBackupComponents::SetRestoreOptions
IVssComponent::GetRestoreOptions
- Fehlermeldungen:
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
IVssComponent::SetPostRestoreFailureMsg
IVssComponent::SetPreRestoreFailureMsg
- Wiederherstellungsziele:
IVssComponent::SetRestoreTarget
IVssComponent::GetRestoreTarget
- Sicherungsstempel:
IVssComponent::SetBackupStamp
IVssComponent::GetBackupStamp
- Zusätzliche Metadaten:
IVssComponent::SetRestoreMetadata
IVssComponent::GetRestoreMetadata
IVssComponent::SetBackupMetadata
IVssComponent::GetBackupMetadata
Daher verwenden Sie die instance der IVssComponent-Schnittstelle des definierenden Elements eines Komponentensatzes oder den Namen, den Typ und den logischen Pfad des definierenden Elements mit einer IVssBackupComponents-Methode, um Eigenschaften für alle Member des Komponentensatzes festzulegen oder abzurufen.
Aus diesem Grund werden Komponentensätze als Einheiten behandelt. Bei instance ist eine Sicherung eines Komponentensatzes nur erfolgreich, wenn die Sicherung aller Dateisätze aller Komponenten erfolgreich ist.
Nehmen wir im vorherigen Beispiel an, dass eine Datei in der Komponente "Jan" (mit dem logischen Pfad "writerData\Set2") ein Element des durch "writerData" definierten Komponentensatzes ist. Wenn eine der Dateien von "Jan" nicht gesichert werden konnte, verwendet ein Anforderer beim Festlegen von IVssBackupComponents::SetBackupSucceeded die Informationen von "writerData" (name "writerData", pfad "" und komponententyp) als Argumente, wenn IVssBackupComponents::SetBackupSucceeded mitfalse festgelegt wird, um den Fehler des Komponentensatzes anzuzeigen.
Ebenso gilt der von IVssComponent::GetBackupSucceeded für die instance der IVssComponent-Schnittstelle zurückgegebene Zustand nicht nur für "writerData", sondern auch für alle untergeordneten Komponenten.
Wenn ein Writer das Wiederherstellungsziel mithilfe von IVssComponent::SetRestoreTarget des instance von "writerData" von IVssComponent ändern würde, würde dies das Wiederherstellungsziel für alle Dateisätze aller Unterkomponenten von "writerData" ändern.
Die folgenden Eigenschaften gelten nicht komponentenweit, sondern für bestimmte Dateien oder Dateisätze:
- Alternative Standortzuordnungen:
IVssBackupComponents::AddAlternativeLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssComponent::GetAlternateLocationMappingCount
- Differenzierte Dateien:
IVssComponent::AddDifferencedFilesByLastModifyTime
IVssComponent::GetDifferencedFile
IVssComponent::GetDifferencedFilesCount
- Partielle Dateien:
IVssComponent::AddPartialFile
IVssComponent::GetPartialFile
IVssComponent::GetPartialFileCount
- Gerichtete Ziele:
IVssComponent::AddDirectedTarget
IVssComponent::GetDirectedTarget
IVssComponent::GetDirectedTargetCount
- Neue Ziele:
IVssBackupComponents::AddNewTarget
IVssComponent::GetNewTarget
IVssComponent::GetNewTargetCount
Wenn ein Anforderer über die IVssBackupComponents-Schnittstelle auf diese Features für eine Teilkomponente zugreift, verwendet er die Komponenteninformationen für die definierende Komponente des Komponentensatzes, aber die Datei- oder Dateisatzinformationen für den Teilkomponenten.
Ebenso wird, wenn über die IVssComponent-Schnittstelle auf die Eigenschaft zugegriffen werden kann, die instance verwendet, die dem definierenden Teilkomponenten entspricht, aber die Datei- oder Dateisatzargumente werden aus dem Unterkomponenten übernommen.
Nehmen wir für instance an, dass für die Unterkomponente "Jan" (mit dem logischen Pfad "writerData\Set2") eine Datei mit dem Pfad "c:\fred", der Dateispezifikation "*.dat" und dem rekursiven Flag "true" an einem anderen Speicherort wiederhergestellt werden muss.
Wenn dies der Fall wäre, würde ein Anforderer IVssBackupComponents::AddAlternativeLocationMapping aufrufen und dabei die Informationen von "writerData" (Komponententyp, komponentenname "writeData" und logischer Pfad "") zusammen mit den Dateisatzinformationen von "Jan" (Pfad "c:\fred", Dateispezifikation "*.dat" und Rekursion entspricht true) aufrufen.
Beachten Sie, dass in diesem Fall die Dateisatzinformationen genau mit den Dateisatzinformationen übereinstimmen müssen, die von IVssCreateWriterMetadata::AddFilesToFileGroup, IVssCreateWriterMetadata::AddDatabaseFiles oder IVssCreateWriterMetadata::AddDatabaseLogFiles verwendet werden, um Dateien zu Jan hinzuzufügen.
Wenn ein Writer einer Datei mit dem Pfad "c:\ethel" und dem von "Jan" verwalteten Namen "lucy.dat" (mit dem logischen Pfad "writerData\Set2") ein gerichtetes Ziel hinzufügen möchte, verwendet er die IVssComponent-instance entspricht "writerData", aber die Dateiinformationen von "Jan".
Implizit eingeschlossene Komponenten im Wiederherstellungssatz
Komponenten, die implizit in eine Sicherung eingeschlossen wurden, können explizit in eine Wiederherstellung einbezogen werden, wenn sie für die Wiederherstellung ausgewählt werden können. Wie unter Working with Selectability for Restore and Subcomponents erwähnt, werden solche Komponenten dem Dokument Sicherungskomponenten mithilfe der IVssBackupComponents::AddRestoreSubcomponent-Methode hinzugefügt.
Dadurch wird jedoch weder eine neue instance der IVssComponent-Schnittstelle erstellt, noch ist der Zugriff auf die Komponente direkt über die IVssBackupComponents-Schnittstelle möglich.
Stattdessen muss auf eine Komponente zugegriffen werden, die explizit für die Wiederherstellung enthalten ist, aber implizit für die Sicherung enthalten ist, über eine instance der IVssComponent-Schnittstelle, die der Komponente entspricht, die den Komponentensatz definiert hat, dessen Mitglied er bei der Sicherung war.
Wenn Sie beispielsweise explizit "Set1", eine Unterkomponente der für die Sicherung auswählbaren Komponente "writerData", für die Wiederherstellung einschließen möchten, erhalten Sie Informationen dazu, indem Sie die IVssComponent::GetRestoreSubcomponent-Methode der "writerData"-instance der IVssComponent-Schnittstelle aufrufen.