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.
Precaució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
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.
Importante 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
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.