Procedimiento para crear una clase de base de datos que se puede restaurar desde una instantánea

Última modificación: miércoles, 13 de enero de 2010

Hace referencia a: SharePoint Foundation 2010

Si tiene un componente de base de datos personalizado hospedado en las ediciones Enterprise o Developer de Microsoft SQL Server que desea que se pueda restaurar desde una instantánea a través de la UI o un modelo de objetos de Microsoft SharePoint Foundation, debe representar el componente con una clase que implemente la interfaz IDatabaseSnapshotRestore. En este tema se explica cómo hacerlo.

Nota de precauciónPrecaución

Las instantáneas requieren que la base de datos esté en funcionamiento, por lo que una instantánea no puede ser una copia de seguridad de fin general para la base de datos. Por lo tanto, en un escenario realista, la clase debe implementar también la interfaz IBackupRestore. Por consiguiente, en este tema se supone que ya realizó los procedimientos de Procedimiento para crear una clase de contenido que se pueda restaurar y de la que se pueda hacer una copia de seguridad y que la clase que implementa IDatabaseSnapshotRestore es la misma que creó en el tema anterior.

Para implementar los miembros de IDatabaseSnapshotRestore

  1. Implemente el método OnPreRestore(SPDatabaseSnapshotRestoreEvent). Proporcione cualquier lógica personalizada que se necesite ejecutar antes de que se restaure una base de datos desde una instantánea.

    Nota importanteImportante

    La implementación debe iniciar una excepción si no puede ejecutar ninguna condición previa a la restauración necesaria. Para obtener más información acerca de este requisito, vea los temas de referencia para las sobrecargas de SPDatabaseSnapshot.Restore().

    En el siguiente ejemplo se muestra una implementación que pone la base de datos sin conexión y, a continuación, pausa el subproceso durante 5 segundos antes de permitir que continúe la restauración. En el ejemplo, "this" hace referencia a un objeto de tipo personalizado llamado SupplementalDatabase, que un desarrollador derivó de la clase 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. Implemente el método OnPostRestore(SPDatabaseSnapshotRestoreEvent). Proporcione cualquier lógica personalizada que se necesite ejecutar después de que se restaure una base de datos desde una instantánea. A continuación se muestra un ejemplo de una implementación que vuelve a poner la base de datos en línea. En el ejemplo, "this" hace referencia a un objeto de tipo personalizado llamado SupplementalDatabase, que el desarrollador derivó de la clase 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
    

    Nota

    La clase personalizada implementará dos métodos OnPostRestore con diferentes firmas; la primera de IBackupRestore y la otra de IDatabaseSnapshotRestore.

Vea también

Tareas

Procedimiento para crear una clase de contenido que se pueda restaurar y de la que se pueda hacer una copia de seguridad

Referencia

IBackupRestore

IDatabaseSnapshotRestore

SPDatabaseSnapshot.Restore()

SPDatabase