Programmatische Verwaltung von Momentaufnahmen von Datenbanken

Letzte Änderung: Dienstag, 16. Februar 2010

Gilt für: SharePoint Foundation 2010

In diesem Thema wird erläutert, wie Sie Momentaufnahmen von Datenbanken in benutzerdefinierte Sicherungs- und Wiederherstellungslösungen integrieren.

Verwaltung von Momentaufnahmen von Datenbanken

Wenn in der Microsoft SharePoint Foundation-Serverfarm die Enterprise- oder Developer-Editionen von Microsoft SQL Server verwendet werden, können Farmadministratoren das Momentaufnahmefeature dieser Editionen nutzen. Die Momentaufnahmen können in SQL Server verwaltet werden. Mit der SharePoint Foundation-API werden jedoch auch Sätze von Klassen bereitgestellt, die in Verbindung mit Zeitgeberaufträgen (SPTimerService und SPJobDefinition) zum Verwalten der Momentaufnahmen verwendet werden können. In der Lösung kann programmatisch bestimmt werden, wie häufig Momentaufnahmen erstellt werden, wie lange die Momentaufnahmen bis zur automatischen Löschung beibehalten werden und wie viele Momentaufnahmen gleichzeitig beibehalten werden.

HinweisHinweis

Bei einer SQL Server-Momentaufnahme handelt es sich nicht wirklich um eine Kopie einer gesamten Datenbank. Nach der Erstellung ist eine Momentaufnahme zunächst leer. Immer wenn Daten in die Originaldatenbank geschrieben werden, wird der vorherige Wert in die Momentaufnahme geschrieben. Wenn auf eine Momentaufnahme zugegriffen wird, werden die Momentaufnahme und die nicht geänderten Daten in der Originaldatenbank von SQL Server wie eine einzige Datenbank behandelt. Daher stellt die Momentaufnahme in Verbindung mit den nicht geänderten Daten in der Originaldatenbank effektiv eine Aufzeichnung der Datenbank zum Zeitpunkt der Erstellung der Momentaufnahme dar. Weitere Informationen finden Sie unter Database Snapshots.

Ermöglichen der Wiederherstellung benutzerdefinierter Datenbanken aus einer Momentaufnahme

Wenn die SharePoint Foundation-Lösung Ihres Unternehmens eine zusätzliche Datenbank umfasst, die von den Enterprise- oder Developer-Editionen von SQL Server gehostet wird, können Sie die Datenbank in der SharePoint Foundation-Infrastruktur registrieren. Hierzu entwerfen Sie die Klasse, die die Datenbank darstellt so, dass die IDatabaseSnapshotRestore-Schnittstelle implementiert wird. Weitere Informationen zur Vorgehensweise finden Sie unter Gewusst wie: Erstellen einer Datenbankklasse, die aus einem Snapshot wiederhergestellt werden kann.

APIs für die Verwaltung von Momentaufnahmen

Es gibt zwei wichtige Klassen im SharePoint Foundation-Objektmodell, die für die Verwaltung von Momentaufnahmen verwendet werden. Diese Klassen werden in den beiden nächsten Unterabschnitten erläutert.

SPDatabaseSnapshot

Objekte dieses Typs stellen Momentaufnahmen dar. Diese Objekte sind nur als Member einer SPDatabaseSnapshotCollection-Auflistung vorhanden, die wiederum nur als Wert der SPDatabase.Snapshots-Eigenschaft vorhanden ist. Die wichtigen Member der SPDatabaseSnapshot-Klasse werden hier zusammengefasst. Weitere Informationen finden Sie in den Referenzthemen zu den einzelnen Klassen (und zu den anderen Membern der Klasse).

  • Delete(): Wie aus dem Namen hervorgeht, wird mit dieser Methode die Momentaufnahme gelöscht. Die Methode kann auf Ad-hoc-Basis aufgerufen werden, wird jedoch normalerweise von einem Zeitgeberauftrag aufgerufen. Mit diesem wird in Intervallen überprüft, ob das maximal zulässige Alter der Momentaufnahme (MaximumRetention) erreicht ist oder ob die maximal zulässige Anzahl von Momentaufnahmen (SnapshotLimit) überschritten ist und die Momentaufnahme die älteste für die Datenbank ist.

  • Restore(): Mit dieser Methode wird die Datenbank mit der Momentaufnahme überschrieben, und anschließend werden alle für die Datenbank vorhandenen Momentaufnahmen gelöscht. Durch eine Überladung der Methode ermöglichen Sie das Erzwingen einer Überschreibung durch den Code, auch wenn IDatabaseSnapshotRestore von der Datenbank nicht implementiert wird.

SPDatabaseSnapshotCollection

Hier werden die wichtigen Member der SPDatabaseSnapshotCollection-Klasse zusammengefasst. Weitere Informationen finden Sie in den Referenzthemen zu den einzelnen Klassen (und zu den anderen Membern der Klasse).

  • CreateSnapshot(): Mit dieser Methode wird SQL Server veranlasst, eine Momentaufnahme zu erstellen. Bei jedem nachfolgenden Schreibvorgang in der Datenbank wird der Orginalwert vom Datenbankserver in die Momentaufnahme geschrieben. Mit der Methode wird außerdem EnabledManagement auf true festgelegt.

  • DeleteSnapshots(): Mit dieser Methode werden alle für die Datenbank vorhandenen Momentaufnahmen gelöscht.

  • RefreshSnapshots(): Mit dieser Methode werden die SharePoint Foundation-Inhaltsdatenbank und die Konfigurationsdatenbank im Hinblick auf die Momentaufnahmen synchronisiert. Dadurch wird sichergestellt, dass ausschließlich alle tatsächlich in SQL Server für die Inhaltsdatenbank vorhandenen Momentaufnahmen in der Konfigurationsdatenbank registriert sind. Generell sollten Sie diese Methode direkt aufrufen, bevor vom Code aus irgendeinem Grund auf eine Momentaufnahme zugegriffen wird, beispielsweise mit einer Indexerstellung (sfdb.Snapshots[0]), wobei sfdb ein SPDatabase-Objekt ist. Von den Methoden CreateSnapshot() und DeleteSnapshots() wird jeweils selbst RefreshSnapshots() aufgerufen.

  • EnabledManagement: Wenn diese Eigenschaft auf true festgelegt ist, wird damit angegeben, dass Aufträge des integrierten SharePoint Foundation-Timerdiensts zum Verwalten von Momentaufnahmen die Verwaltung der übergeordneten Datenbank einschließen sollen; mit diesem Auftrag werden beispielsweise in der Regel in angegebenen Intervallen Momentaufnahmen für die Daten erstellt und gelöscht. Wenn die Eigenschaft auf false festgelegt ist, wird die Datenbank von diesen Aufträgen ignoriert. Wenn die SharePoint Foundation-Lösung eigene Zeitgeberaufträge für die Verwaltung von Momentaufnahmen für bestimmte Datenbanken enthält, müssen Sie EnabledManagement für diese Datenbanken auf false festlegen. Anderenfalls werden von zwei in Konflikt miteinander stehenden Zeitgeberaufträgen Momentaufnahmen der gleichen Datenbank erstellt. Mit der CreateSnapshot()-Methode wird diese Eigenschaft auf true festgelegt.

  • CreationInterval: Mit dieser Eigenschaft wird angegeben, wie häufig (in Stunden) eine neue Momentaufnahme der übergeordneten Datenbank erstellt wird.

  • MaximumRetention: Mit dieser Eigenschaft wird angegeben, wie lange (in Stunden) eine Momentaufnahme bis zur Löschung beibehalten wird.

  • SnapshotLimit: Mit dieser Eigenschaft wird angegeben, wie viele Momentaufnahmen der übergeordneten Datenbank maximal gleichzeitig vorhanden sein können.

Konfigurieren der Momentaufnahmen einer Datenbank für die Verwaltung

Zum Einrichten einer Datenbank für die Verwaltung durch den im Lieferumfang von SharePoint Foundation enthaltenen integrierten Zeitgeberauftrag für die Verwaltung von Momentaufnahmen führen Sie mithilfe von Code die folgenden Aktionen aus.

Zum Einrichten einer Datenbank für die Verwaltung durch einen benutzerdefinierten Zeitgeberauftrag für die Verwaltung von Momentaufnahmen führen Sie die gleichen Schritte aus, legen aber die EnabledManagement-Eigenschaft auf false fest.

Wiederherstellen aus einer Momentaufnahme

Folgende Hauptschritte müssen zum programmatischen Wiederherstellen einer Datenbank aus einer Momentaufnahme ausgeführt werden:

  1. Rufen Sie einen Verweis auf das SPDatabase-Objekt ab, das die Datenbank darstellt.

  2. Rufen Sie RefreshSnapshots() auf, um sicherzustellen, dass Sie mit dem aktuellen Satz von Momentaufnahmen für die Datenbank arbeiten. Verwenden Sie beispielsweise sfdb.Snapshots.RefreshSnapshots();, wobei sfdb ein Verweis auf das SPDatabase-Objekt ist.

  3. Rufen Sie einen Verweis auf die Momentaufnahme ab, die Sie für die Wiederherstellung verwenden möchten. Wenn Sie beispielsweise einen Verweis auf die zuletzt erstellte Momentaufnahme abrufen möchten, können Sie die folgenden Zeilen verwenden.

    Int32 numberOfSnapshots = sfdb.Snapshots.Count;
    SPDatabaseSnapshot spDBSnapshot = sfdb.Snapshots[numberOfSnapshots-1];
    
    Dim numberOfSnapshots As Int32 = sfdb.Snapshots.Count
    Dim spDBSnapshot As SPDatabaseSnapshot = sfdb.Snapshots(numberOfSnapshots-1)
    
  4. Rufen Sie eine der Restore()-Methoden für die Momentaufnahme auf. Der folgende Code ist ein Beispiel dafür.

    spDBSnapshot.Restore();
    
    spDBSnapshot.Restore()
    

Implementieren eines eigenen Zeitgeberauftrags für die Verwaltung von Momentaufnahmen

Wenn Sie mit dem SharePoint Foundation-Objektmodell eine benutzerdefinierte Verwaltungsanwendung für Momentaufnahmen entwickeln möchten, können Sie von der SPJobDefinition-Klasse eine eigene Klasse ableiten. Die Hauptaufgabe besteht darin, eine Außerkraftsetzung der Execute(Guid)-Methode zu erstellen. Im Allgemeinen möchten Sie mit dieser Methode folgende Aktionen ausführen:

  • Rufen Sie einen Verweis auf das SPDatabaseServiceInstance-Objekt ab, von dem die Datenbanken gehostet werden.

  • Durchlaufen Sie alle Member der Databases-Eigenschaft des Objekts, und führen Sie folgende Aktionen aus:

    • Überprüfen Sie den Wert von sfdb.Snapshots.EnabledManagement, wobei sfdb ein Verweis auf das SPDatabase-Objekt ist. Führen Sie keine weiteren Aktionen aus, wenn der Wert true entspricht. (Wenn der Wert true entspricht, werden die Momentaufnahmen für die Datenbank von den in SharePoint Foundation integrierten Zeitgeberaufträgen für die Verwaltung von Momentaufnahmen verwaltet.)

    • Aktualisieren Sie für jede der anderen Datenbanken mit einem Aufruf von RefreshSnapshots() die Liste der Momentaufnahmen, und löschen Sie dann die Momentaufnahmen, deren Age größer ist als der Wert der MaximumRetention-Eigenschaft.

    • Führen Sie einen weiteren Aufruf an RefreshSnapshots() aus, und vergleichen Sie dann das Alter der letzten Momentaufnahme (sfdb.Snapshots[sfdb.Snapshots.Count-1].Age) mit dem Wert von CreationInterval. Wenn der erste Wert größer oder gleich dem zweiten ist, erstellen Sie mit einem Aufruf an CreateSnapshot() eine neue Momentaufnahme.

    • Führen Sie einen weiteren Aufruf an RefreshSnapshots() aus, und überprüfen Sie dann, ob die Gesamtanzahl der Momentaufnahmen größer als SnapshotLimit ist. Wenn dies der Fall ist, löschen Sie so viele Momentaufnahmen, dass die Gesamtsumme dem Limit entspricht. Löschen Sie zuerst die älteste Momentaufnahme (sfdb.Snapshots[0]), dann die nächstälteste (sfdb.Snapshots[1]) usw.