Partager via


Procédure : créer une classe de base de données qui peut être restaurée à partir d’un instantané

Dernière modification : mercredi 13 janvier 2010

S’applique à : SharePoint Foundation 2010

Si vous disposez d’un composant de base de données personnalisé hébergé dans l’édition Entreprise ou Développeur de Microsoft SQL Server que vous souhaitez pouvoir restaurer à partir d’un instantané via le modèle objet ou l’interface utilisateur Microsoft SharePoint Foundation, vous devez représenter le composant par une classe qui implémente l’interface IDatabaseSnapshotRestore. Cette rubrique explique comment procéder.

Note AttentionAttention

Les instantanés nécessitent que la base de données soit opérationnelle, un instantané ne consiste donc pas en une sauvegarde à usage général de la base de données. Par conséquent, dans un scénario réaliste, votre classe doit aussi implémenter l’interface IBackupRestore. Pour ces raisons, cette rubrique suppose que vous avez exécuté les procédures décrites dans Procédure : créer une classe de contenu qui peut être sauvegardée et restaurée et que la classe qui implémente IDatabaseSnapshotRestore est celle que vous avez créée dans la dernière rubrique.

Pour implémenter les membres d’IDatabaseSnapshotRestore

  1. Implémentez la méthode OnPreRestore(SPDatabaseSnapshotRestoreEvent). Fournissez la logique personnalisée à exécuter avant la restauration d’une base de données à partir d’un instantané.

    Important

    Votre implémentation doit générer une exception si elle ne peut pas exécuter toute condition préalable nécessaire à la restauration. Pour plus d’informations à propos de cette exigence, voir les rubriques de référence relatives aux surcharges de SPDatabaseSnapshot.Restore().

    L’exemple suivant illustre une implémentation qui met la base de données hors connexion, puis suspend le thread pendant 5 secondes avant de laisser la restauration se dérouler. Dans cet exemple, this fait référence à un objet de type personnalisé appelé SupplementalDatabase qu’un développeur a dérivé de la classe SPDatabase.

    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. Implémentez la méthode OnPostRestore(SPDatabaseSnapshotRestoreEvent). Fournissez la logique personnalisée à exécuter après la restauration d’une base de données à partir d’un instantané. L’exemple suivant illustre une implémentation qui remet la base de données en ligne. Dans cet exemple, this fait référence à un objet de type personnalisé appelé SupplementalDatabase qu’un développeur a dérivé de la classe SPDatabase.

    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
    

    Notes

    Votre classe personnalisée va implémenter deux méthodes OnPostRestore, avec des signatures différentes ; la première à partir de IBackupRestore et l’autre à partir de IDatabaseSnapshotRestore.

Voir aussi

Tâches

Procédure : créer une classe de contenu qui peut être sauvegardée et restaurée

Référence

IBackupRestore

IDatabaseSnapshotRestore

SPDatabaseSnapshot.Restore()

SPDatabase