Gewusst wie: Erstellen einer Datenbankklasse, die aus einem Snapshot wiederhergestellt werden kann

Letzte Änderung: Mittwoch, 13. Januar 2010

Gilt für: SharePoint Foundation 2010

Wenn Sie eine benutzerdefinierte Datenbankkomponente haben, die entweder in der Enterprise- oder in der Developer-Edition von Microsoft SQL Server gehostet wird und die von einem Snapshot über die Microsoft SharePoint Foundation-Benutzeroberfläche oder das Objektmodell wiederherstellbar sein soll, müssen Sie die Komponente mit einer Klasse darstellen, die die IDatabaseSnapshotRestore-Schnittstelle implementiert. In diesem Thema wird erklärt, wie Sie dies erreichen.

VorsichtVorsicht

Für einen Snapshot muss die Datenbank aktiv sein, daher kann ein Snapshot nicht als allgemeine Datenbanksicherung dienen. Somit muss die verwendete Klasse in einem realistischen Szenario auch die IBackupRestore-Schnittstelle implementieren. Entsprechend wird in diesem Thema davon ausgegangen, dass Sie die Verfahren in Gewusst wie: Erstellen einer Inhaltsklasse, die gesichert und wiederhergestellt werden kann ausgeführt haben und dass die Klasse, die die IDatabaseSnapshotRestore-Schnittstelle implementiert, die gleiche ist, die Sie auch im genannten Thema erstellt haben.

So implementieren Sie die Member von "IDatabaseSnapshotRestore"

  1. Implementieren Sie die OnPreRestore(SPDatabaseSnapshotRestoreEvent)-Methode. Stellen Sie etwaige benutzerdefinierte Logik bereit, die ausgeführt werden muss, bevor eine Datenbank von einem Snapshot wiederhergestellt wird.

    Wichtiger HinweisWichtig

    Die Implementierung muss eine Ausnahme auslösen, wenn sie eine erforderliche Vorbedingung für die Wiederherstellung nicht ausführen kann. Weitere Informationen zu dieser Bedingung finden Sie in den Referenzthemen zu den Überladungen von SPDatabaseSnapshot.Restore().

    Im folgenden Beispiel wird eine Implementierung gezeigt, in der eine Datenbank offline geschaltet wird und dann der Thread fünf Sekunden lang angehalten wird, bevor die Wiederherstellung aufgenommen wird. In diesem Beispiel bezieht sich "this" auf ein Objekt eines benutzerdefinierten Typs namens SupplementalDatabase, das ein Entwickler von der SPDatabase-Klasse abgeleitet hat.

    public void OnPreRestore(SPDatabaseSnapshotRestoreEvent args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
    
        try
        {
            this.Status = SPObjectStatus.Offline;
            this.Update();
            Thread.Sleep(5000);
        }
        catch (exception)
        {
            Exception e = new Exception(String.Format("Restoration from {0} cancelled because pre-restoration steps could not be executed.", args.Snapshot.Name), exception);
            throw e;
        }
    }
    
    Public Sub OnPreRestore(ByVal args As SPDatabaseSnapshotRestoreEvent)
            If args Is Nothing Then
                    Throw New ArgumentNullException("args")
            End If
    
            Try
                    Me.Status = SPObjectStatus.Offline
                    Me.Update()
                    Thread.Sleep(5000)
            Catch e1 As exception
                    Dim e As New Exception(String.Format("Restoration from {0} cancelled because pre-restoration steps could not be executed.", args.Snapshot.Name), exception)
                    Throw e
            End Try
    End Sub
    
  2. Implementieren Sie die OnPostRestore(SPDatabaseSnapshotRestoreEvent)-Methode. Stellen Sie etwaige benutzerdefinierte Logik bereit, die ausgeführt werden muss, nachdem eine Datenbank von einem Snapshot wiederhergestellt wurde. Im folgenden Beispiel wird eine Implementierung gezeigt, die die Datenbank wieder online schaltet. Dabei bezieht sich "this" auf ein Objekt eines benutzerdefinierten Typs namens SupplementalDatabase, das ein Entwickler von der SPDatabase-Klasse abgeleitet hat.

    public void OnPostRestore(SPDatabaseSnapshotRestoreEvent args)
    {
        if (args == null)
        {
            throw new ArgumentNullException("args");
        }
    
        this.Status = SPObjectStatus.Online;
        this.Update(true);
    }
    
    Public Sub OnPostRestore(ByVal args As SPDatabaseSnapshotRestoreEvent)
            If args Is Nothing Then
                    Throw New ArgumentNullException("args")
            End If
    
            Me.Status = SPObjectStatus.Online
            Me.Update(True)
    End Sub
    
    HinweisHinweis

    Die benutzerdefinierte Klasse implementiert zwei OnPostRestore-Methoden mit unterschiedlichen Signaturen, die erste aus IBackupRestore und die andere aus IDatabaseSnapshotRestore.

Siehe auch

Aufgaben

Gewusst wie: Erstellen einer Inhaltsklasse, die gesichert und wiederhergestellt werden kann

Referenz

IBackupRestore

IDatabaseSnapshotRestore

SPDatabaseSnapshot.Restore()

SPDatabase