Rolle "Writer" beim Sichern komplexer Speicher
Wie bei allen wichtigen Vorgängen unter VSS erfordern inkrementelle und differenzielle Sicherungen eine enge Zusammenarbeit zwischen Anfordernden und Writern.
Sicherungstypen
Die Infrastruktur bietet spezielle Unterstützung für fünf Sicherungstypen. Die Schritte lassen sich wie folgt beschreiben:
Full (VSS _ BT _ FULL). Dateien werden unabhängig vom letzten Sicherungsdatum gesichert. Der Sicherungsverlauf jeder Datei wird aktualisiert, und dieser Sicherungstyp kann als Grundlage für eine inkrementelle oder differenzielle Sicherung verwendet werden. Wenn Protokolldateien enthalten sind, werden sie möglicherweise als Ergebnis dieser Sicherung abgeschnitten.
Zum Wiederherstellen einer vollständigen Sicherung ist nur ein einzelnes Sicherungsimage erforderlich.
Differenziell (VSS _ BT _ DIFFERENTIAL). Die VSS-API wird verwendet, um sicherzustellen, dass nur Dateien, die seit der letzten vollständigen Sicherung geändert oder hinzugefügt wurden, auf ein Speichermedium kopiert werden sollen. Alle Zwischensicherungsinformationen werden ignoriert. Dies kann ganze Dateien oder bestimmte Bereiche in Dateien umfassen. Eine differenzielle Sicherung ist einer vollständigen Sicherung zugeordnet und kann im Allgemeinen erst wiederhergestellt werden, wenn die vollständige Sicherung wiederhergestellt wurde. Wenn Protokolldateien enthalten sind, werden sie in der Regel nicht als Ergebnis dieser Sicherung abgeschnitten.
Das Wiederherstellen einer differenziellen Sicherung erfordert das ursprüngliche Sicherungsimage und das letzte differenzielle Sicherungsimage, das seit der letzten vollständigen Sicherung erstellt wurde.
Inkrementell (VSS _ BT _ INCREMENTAL). Die VSS-API wird verwendet, um sicherzustellen, dass nur Dateien, die seit der letzten vollständigen oder inkrementellen Sicherung geändert oder hinzugefügt wurden, auf ein Speichermedium kopiert werden. Dies kann ganze Dateien oder bestimmte Bereiche in Dateien umfassen. Einige Writer lassen nicht zu, dass inkrementelle Sicherungen mit differenziellen Sicherungen gemischt werden. Wenn Protokolldateien enthalten sind, werden sie möglicherweise als Ergebnis dieser Sicherung abgeschnitten.
Das Wiederherstellen einer inkrementellen Sicherung erfordert das ursprüngliche Sicherungsimage und alle inkrementellen Sicherungsimages, die seit der ersten Sicherung erstellt wurden.
Protokollsicherung (VSS _ BT _ LOG). Nur die Protokolldateien eines Writers (Dateien, die einer Komponente mit der IVssCreateWriterMetadata::AddDataBaseLogFiles-Methode hinzugefügt und durch einen Aufruf von IVssWMComponent::GetDatabaseLogFileabgerufen werden) werden unterstützt. Dieser Sicherungstyp ist für VSS spezifisch. Protokollsicherungen werden in der Regel sehr häufig erstellt. In der Regel wird die Protokolldatei als Ergebnis dieser Sicherung abgeschnitten.
Kopiesicherung (VSS _ BT _ COPY). Wie beim VSS BT FULL-Sicherungstyp werden Dateien unabhängig vom _ _ letzten Sicherungsdatum gesichert. Der Sicherungsverlauf jeder Datei wird jedoch nicht aktualisiert, und dieser Sicherungstyp kann nicht als Grundlage für eine inkrementelle oder differenzielle Sicherung verwendet werden. Protokolldateien sollten nie als Ergebnis einer Kopiersicherung abgeschnitten werden.
-
Teilweise Dateiunterstützung
-
Einige Writer unterstützen die Dateiwiederherstellung durch das Überschreiben von Teilen der Dateien, die sie verwalten. Ein Anfordernder kann so entworfen werden, dass er dies nutzt. Wenn dies der Fall ist, wird dies durch Festlegen der Informationen in IVssBackupComponents::SetBackupState angegeben.
Die Writer geben an, welche Art von Sicherungen unterstützt werden, indem sie IVssCreateWriterMetadata::SetBackupSchema aufrufen, während das Identify-Ereignis verarbeitet wird. Der dsSchemaMask-Parameter für die IVssCreateWriterMetadata::SetBackupSchema-Methode ist eine Bitmaske, die angibt, welche Sicherungstypen unterstützt werden. Alle Writer müssen vollständige Sicherungen unterstützen.
-
VSS _ BS _ DIFFERENTIAL
-
Gibt die Unterstützung für differenzielle Sicherungen an.
-
VSS _ BS _ INCREMENTAL
-
Gibt die Unterstützung für inkrementelle Sicherungen an.
-
VSS _ _ BS-PROTOKOLL
-
Gibt die Unterstützung für Protokollsicherungen an.
-
VSS _ BS _ COPY
-
Gibt die Unterstützung für Kopiesicherungen an.
-
VSS _ BS _ EXCLUSIVE _ INCREMENTAL _ DIFFERENTIAL
-
Gibt an, dass ein Writer das Mischen inkrementeller Sicherungen mit differenziellen Sicherungen nicht unterstützt.
Der Writer kann bestimmen, welcher Sicherungstyp ausgeführt wird, indem er CVssWriter::GetBackupType aufruft. Der früheste Zeitpunkt, an dem dies ausgeführt werden kann, ist die Verarbeitung des PrepareForBackup-Ereignisses. CVssWriter::GetBackupType gibt einen Member der VSS _ BACKUP _ TYPE-Enumeration zurück. Wenn der Sicherungstyp vom Writer nicht unterstützt wird, sollte der Writer die Sicherung als vollständige Sicherung behandeln.
Sicherungsstempel
Inkrementelle und differenzielle Sicherungen sind immer an eine vorherige Sicherung gebunden. Es gibt zwei Möglichkeiten, Sicherungen zu verknüpfen. Bei einfachen Datenspeichern kann der Anfordernde die Korrelation zwischen Sicherungen nachverfolgen. Für komplexere Datenspeicher muss der Writer jedoch seinen eigenen Zeitstempel mit der Sicherung verwalten. dieser Zeitstempel kann die Protokollposition, Prüfpunktinformationen und so weiter nachverfolgen. Ein Writer gibt an, dass er eigene Zeitstempel benötigt, indem er das _ VSS BS _ TIMESTAMPED-Bit beim Aufrufen von IVssCreateWriterMetadata::SetBackupSchema eingibt.
Ein Writer kann einen Zeitstempel für jede Komponente speichern, die sichern wird. Der Writer speichert den Zeitstempel, indem er IVssComponent::SetBackupStampaufruft und eine Zeichenfolgendarstellung des Stempels für den wszBackupStamp-Parameter übergibt. Im Allgemeinen wird diese Methode von einem Writer beim Verarbeiten des PostSnapshot-Ereignisses verwendet. Bei Sicherungen ohne Schattenkopie wird das PostSnapshot-Ereignis jedoch nicht gesendet. In diesem Fall muss IVssComponent::SetBackupStamp während der Verarbeitung des PrepareForBackup-Ereignisses aufgerufen werden.
Wenn eine inkrementelle oder differenzielle Sicherung ausgeführt wird, gibt der Anfordernde dem Writer den Sicherungsstempel der vorherigen Sicherung an, die als Basis für diese Sicherung dient. Der Writer kann während der Verarbeitung des PrepareForBackup- oder PostSnapshot-Ereignisses auf diesen vorherigen Sicherungsstempel zugreifen, indem er IVssComponent::GetPreviousBackupStamp aufruft. Der Writer kann den zurückgegebenen Stempel verwenden, um zu bestimmen, was zu sichern ist.
Sicherungsstrategien
Strategien für Dateisicherungsdateien
Häufig müssen bestimmte Dateien, die in den Writer-Metadaten gemeldet werden, nur gesichert werden, wenn bestimmte Sicherungstypen erstellt werden. Einige Dateien sind möglicherweise nur erforderlich, wenn eine vollständige Sicherung erstellt wird. Andere Dateien sind möglicherweise nur erforderlich, wenn eine inkrementelle oder differenzielle Sicherung durchgeführt wird. VSS stellt eine Methode für die Writer zur Verfügung, um dem Anfordernden diese Informationen anzugeben. Beim Hinzufügen von Dateien zu Komponenten mit IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFilesoder IVssCreateWriterMetadata::AddFilesToFileGroupgibt der parameter dwBackupTypeMask an, für welche Sicherungstypen diese Dateien gesichert werden müssen. Die Maske kann einen oder mehrere der folgenden Werte enthalten:
-
VOLLSTÄNDIGE VSS _ _ _ FSBT-SICHERUNG _ ERFORDERLICH
-
Erforderlich für vollständige Sicherungen.
-
VSS FSBT DIFFERENTIAL BACKUP REQUIRED (VSS _ _ FSBT-DIFFERENZIELLE _ _ SICHERUNG ERFORDERLICH)
-
Erforderlich für differenzielle Sicherungen.
-
VSS _ FSBT: _ INKREMENTELLE _ SICHERUNG _ ERFORDERLICH
-
Erforderlich für inkrementelle Sicherungen.
-
VSS _ _ FSBT-PROTOKOLLSICHERUNG _ _ ERFORDERLICH
-
Erforderlich für Protokollsicherungen.
-
VSS _ _ FSBT: ALLE _ _ SICHERUNGEN ERFORDERLICH
-
Für alle Sicherungstypen erforderlich; dies ist die Standardeinstellung.
Diese Spezifikation überschreibt die Selektivitätsspezifikation der Komponente. Stellen Sie sich beispielsweise eine Komponente vor, deren Dateien alle mit VSS _ FSBT _ LOG BACKUP _ _ REQUIRED gekennzeichnet sind, jedoch nicht mit VSS _ FSBT FULL BACKUP _ _ _ REQUIRED. Angenommen, diese Komponente kann nicht für die Sicherung ausgewählt werden (bSelectable war false, als IVssCreateWriterMetadata::AddComponent aufgerufen wurde). Im Fall einer Protokollsicherung bedeutet dies, dass alle Dateien in dieser Komponente immer gesichert werden müssen. Im Fall einer vollständigen Sicherung muss jedoch keine der Dateien gesichert werden, obwohl die Selektivität der Komponente impliziert, dass sie gesichert werden sollte.
Sicherung nach zeitpunkt der letzten Änderung
Eine Möglichkeit für einen Writer, anzugeben, welche Dateien sich geändert haben, ist die Verwendung des Differenzdateimechanismus. Ein Writer kann angeben, dass bestimmte Dateien in einer Komponente nur dann sichern werden sollen, wenn sie seit einer bestimmten Zeit geändert wurden. Der Writer ruft IVssComponent::AddDifferencedFilesByLastModifyTime mit einer Dateispezifikation und einem Zeitpunkt der letzten Änderung auf. IVssComponent::AddDifferencedFilesByLastModifyTime wird in der Regel während der Verarbeitung des PostSnapshot-Ereignisses aufgerufen, obwohl es während der Verarbeitung des PrepareForBackup-Ereignisses aufgerufen werden kann. Der Anfordernde muss dann alle Dateien sichern, die der Dateispezifikation entsprechen, die sich seit dem angegebenen Zeitpunkt geändert haben. Wenn der Writer den Sicherungsstempelmechanismus verwendet, wird dieser Zeitpunkt der letzten Änderung basierend auf dem vorherigen Sicherungsstempel im Sicherungsdokument bestimmt. Der Writer kann auch 0 (null) für die letzte Änderung übergeben. Dies bedeutet, dass der Anfordernde für die Bestimmung des Zeitpunkts der letzten Sicherung und der seit diesem Zeitpunkt geänderten Dateien verantwortlich ist.
Partielle Dateisicherung
Eine weitere Möglichkeit für einen Writer, Änderungen an der anfordernden Person anzugeben, ist die Verwendung des Mechanismus für partielle Dateien. Ein Writer kann Bytebereiche in Komponentendateien angeben, die gesichert werden müssen. Der Writer kann diese Dateibereiche während der Verarbeitung des PostSnapshot- oder PrepareForBackup-Ereignisses angeben. Der Writer ruft IVssComponent::AddPartialFile auf, um der Sicherung partielle Dateispezifikationen hinzuzufügen. Eine partielle Dateispezifikation besteht aus einem Pfad und einem Dateinamen sowie Informationen darüber, welche Bereiche in der Datei gesichert werden müssen.
Dateispezifikationsregeln
IVssComponent::AddDifferencedFilesByLastModifyTime oder IVssComponent::AddPartialFile können beide verwendet werden, um dateispezifikationen zu ändern, die während des Identify-Ereignisses angegeben wurden, oder um der Spezifikation vollständig neue Dateien hinzuzufügen. Wenn der Writer informationen ändert, die während des Identify-Ereignisses mithilfe von IVssComponent::AddDifferencedFilesByLastModifyTime festgelegt wurden, muss die Dateispezifikation genau mit einer der Dateispezifikationen in der aktuellen Komponente übereinstimmen. Die Dateispezifikation darf dateien in der aktuellen Komponente nicht teilweise überlappen und darf nicht mit Dateien in anderen Komponenten übereinstimmen. Dateien, die mithilfe von IVssComponent::AddPartialFile angegeben werden, können sich jedoch teilweise überlappen. Informationen, die von IVssComponent::AddDifferencedFilesByLastModifyTime oder IVssComponent::AddPartialFile festgelegt wurden, überschreiben die zuvor festgelegten Informationen mithilfe der IVssCreateWriterMetadata-Schnittstelle als Reaktion auf das Identify-Ereignis.
Allgemeine Dateispezifikationen können einen Wert für einen alternativen Speicherort aufweisen (festgelegt durch den wszAlternateLocation-Parameter von IVssCreateWriterMetadata::AddFilesToFileGroup),der einen alternativen Speicherort zum Abrufen der Datei zum Zeitpunkt der Sicherung angibt. Wenn die dateispezifikation, die über die Mechanismen differenced-file oder partial-file festgelegt wurde, mit einer vorhandenen Dateispezifikation übereinstimmt, die über einen alternativen Speicherort verfügt, ruft die Sicherungsanwendung die Daten von diesem alternativen Speicherort ab.
Wenn die dateispezifikation, die in IVssComponent::AddDifferencedFilesByLastModifyTime oder in IVssComponent::AddPartialFile festgelegt ist, nicht mit den Dateien in der komponente übereinstimmt, die gesichert werden, werden jetzt alle übereinstimmenden Dateien zur Sicherung hinzugefügt. Es muss darauf geachtet werden, dass der Writer nur Dateien hinzufügt, die auf einem Volume vorhanden sind, das bereits während dieser Arbeit schattenkopiert wird. Andernfalls kann der Anforderer diese Dateien möglicherweise nicht sichern. Wenn diese Funktionen während der Verarbeitung des PostSnapshot-Ereignisses aufgerufen werden, kann dies mithilfe der CVssWriter::IsPathAffected-Methode bestimmt werden. Wenn er während der Behandlung des PrepareForBackup-Ereignisses aufgerufen wird, muss der Writer diese Bestimmung mithilfe einer anderen Methode vornehmen.
Sicherung ohne Schattenkopie
Bestimmte Dateitypen müssen möglicherweise nicht von einem Schattenkopievolume gesichert werden. Dies gilt beispielsweise häufig für Datenbankprotokolldateien. Da Protokolldateien monoton zunehmen und ein Writer genau angeben kann, welche Teile der Datei mithilfe von Teildateien gesichert werden sollen, ist es häufig möglich, das Protokoll vom ursprünglichen Volume zu sichern. Als Optimierung kann ein Writer markieren, welche Dateien Schattenkopien für verschiedene Sicherungstypen erfordern, indem er die im dwBackupTypeMask-Parameter von IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFilesoder IVssCreateWriterMetadata::AddFilesToFileGroupfestgelegten Flags verwendet. Folgende Flags werden unterstützt:
-
VOLLSTÄNDIGE VSS _ _ _ FSBT-MOMENTAUFNAHME _ ERFORDERLICH
-
Schattenkopie für vollständige Sicherungen erforderlich.
-
VSS _ FSBT _ DIFFERENTIAL SNAPSHOT _ _ ERFORDERLICH
-
Schattenkopie für differenzielle Sicherungen erforderlich.
-
INKREMENTELLE VSS _ _ _ FSBT-MOMENTAUFNAHME _ ERFORDERLICH
-
Schattenkopie erforderlich für inkrementelle Sicherungen.
-
VSS _ _ FSBT-PROTOKOLLMOMENTAUFNAHME _ _ ERFORDERLICH
-
Schattenkopie für Protokollsicherungen erforderlich.
-
VSS _ FSBT _ – ALLE _ MOMENTAUFNAHMEN _ ERFORDERLICH
-
Schattenkopie ist für alle Sicherungstypen erforderlich. Dies ist die Standardeinstellung.
Wenn ein bestimmtes Volume nur Komponenten enthält, für die für diese Sicherung keine Schattenkopie erforderlich ist, kann der Anforderer den Schritt zum Erstellen einer Schattenkopie für dieses Volume überspringen. Alle Daten auf diesem Volume können direkt vom ursprünglichen Volume auf das Sicherungsmedium kopiert werden.
Sicherungsbereinigung
Wenn der Writer eine Protokollkürzung oder eine andere Bereinigung nach der Sicherung durchführen muss, ist der richtige Ort hierfür die Verarbeitung des BackupComplete-Ereignisses. Das BackupShutdown-Ereignis wird einige Zeit nach BackupComplete gesendet, sodass einige Bereinigungen auch im BackupShutdown-Ereignishandler durchgeführt werden können.
Das BackupShutdown-Ereignis wird immer nach beendigung einer Sicherung gesendet. Wenn der Anforderer beim Ausführen einer Sicherung ungewöhnlich beendet wird, wird BackupShutdown sofort gesendet, ohne zuerst BackupComplete zu senden. Wenn der Writer einen Beliebigen Zustand bereinigen muss, kann dies hier erfolgen. In diesem Fall sollte die Protokollkürzung jedoch nicht erfolgen, da die Sicherung nicht notwendigerweise abgeschlossen wurde.
Wiederherstellungsstrategien
Die grundlegenden Aufgaben von Writern bei der Wiederherstellung bestehen darin, zu überprüfen, ob die Wiederherstellung bei der Behandlung des PreRestore-Ereignisses erfolgen kann und ob die Wiederherstellung bei der Behandlung des PostRestore-Ereignisses erfolgt ist. Komplexere Speicher führen auch einen Wiederherstellungsprozess im PostRestore-Handler aus. Wenn die Wiederherstellung Teil einer inkrementellen oder differenziellen Wiederherstellung ist, möchte der Writer diesen Wiederherstellungsprozess in der Regel verzögern, bis alle inkrementellen oder differenziellen Wiederherstellungen abgeschlossen sind. IVssComponent::GetAdditionalRestores gibt an, ob dies die endgültige Wiederherstellung dieser Komponente ist oder ob weitere Wiederherstellungen folgen. Wenn IVssComponent::GetAdditionalRestores true zurückgibt, sollte der Writer seine Wiederherstellungsprozedur für diese Komponente nicht ausführen.
Neue Ziele
Wenn dies vom Writer unterstützt wird, kann der Anforderer Datendateien an einem anderen Speicherort als dem ursprünglichen Sicherungszeitspeicherort wiederherstellen. Ein Writer gibt Unterstützung für diesen Wiederherstellungsmodus an, indem das VSS _ BS _ WRITER SUPPORTS _ NEW _ _ TARGET-Bit im dsSchemaMask-Parameter festgelegt wird, wenn IVssCreateWriterMetadata::SetBackupSchemaaufgerufen wird. Ein Writer ruft die neuen Speicherorte für Komponentendateien zur Wiederherstellungszeit ab, indem er IVssComponent::GetNewTargetCount und IVssComponent::GetNewTarget aufruft.
Directed Targets
Bei komplizierten Wiederherstellungsszenarien kann ein Writer Bereiche einer gesicherten Datei verschiedenen Bereichen derselben oder einer anderen Datei zuordnen. Dies kann mithilfe des zielgesteuerten Mechanismus erfolgen. Dazu muss ein Writer zuerst angeben, dass dies geschieht, indem er IVssComponent::SetRestoreTarget aufruftund VSS _ RT _ DIRECTED für den Zielparameter übergibt. Anschließend ruft der Writer für jede Zuordnung IVssComponent::AddDirectedTargetauf. Diese Methode verwendet einen vollständigen Pfad zu einer Quelldatei in der Sicherung und einen vollständigen Pfad zu einer Zieldatei, in der wiederhergestellt wird. Außerdem wird für jede dieser Dateien eine Bereichsliste verwendet. Der Writer ruft diese Funktionen während der Behandlung des PreRestore-Ereignisses auf, und der Anforderer ist dann für die Wiederherstellung der angegebenen Bereiche in der Quelldatei in den zugeordneten Bereichen in der Zieldatei verantwortlich. Das Format der Bereichszeichenfolge ist dasselbe wie in IVssComponent::AddPartialFile.
Private Writer-Metadaten
Es ist häufig nützlich, dass ein Writer private Metadaten mit einer Sicherung verwaltet, um eine inkrementelle oder differenzielle Wiederherstellung ordnungsgemäß durchzuführen. Ein Writer kann IVssComponent::SetBackupMetadata aufrufen, während er entweder PrepareForBackup oder PostSnapshot zum Speichern von Metadaten verarbeitet. Auf diese Metadaten kann der Writer während PreRestore oder PostRestore zugreifen, indem IVssComponent::GetBackupMetadataaufgerufen wird. Metadaten können auch mit partieller Dateispezifikation gespeichert werden, indem der wszMetadata-Parameter von IVssComponent::AddPartialFile verwendet wird. Auf diese Metadaten wird über den pbstrMetadata-Parameter von IVssComponent::GetPartialFilezugegriffen. Der Writer kann auch Metadaten zwischen CVssWriter::OnPreRestore und CVssWriter::OnPostRestorean sich selbst übergeben. In CVssWriter::OnPreRestore werden die Metadaten durch Aufrufen von IVssComponent::SetRestoreMetadatafestgelegt. In CVssWriter::OnPostRestore werden die Metadaten durch Aufrufen von IVssComponent::GetRestoreMetadataabgerufen.