Administración de programación de instantáneas de base de datos

Última modificación: martes, 16 de febrero de 2010

Hace referencia a: SharePoint Foundation 2010

En este tema se explica cómo incorporar instantáneas de base de datos en las soluciones de copia de seguridad y recuperación de datos personalizadas.

Administración de instantáneas de base de datos

Si el conjunto o granja de servidores de Microsoft SharePoint Foundation usa las ediciones Enterprise o Developer de Microsoft SQL Server, los administradores de la granja de servidores pueden aprovechar la característica de instantánea de esas ediciones. Las instantáneas pueden administrarse en SQL Server, pero la API de SharePoint Foundation también proporciona un conjunto de clases que pueden usarse, junto con otros trabajos del temporizador (SPTimerService y SPJobDefinition), para administrar instantáneas. La solución puede determinar mediante programación la frecuencia con la que se crearán las instantáneas, cuánto tiempo durará cada una hasta que se elimine automáticamente y cuántas instantáneas se conservarán en un momento dado.

Nota

Una instantánea de SQL Server no es una copia real de una base de datos completa. La instantánea está vacía cuando se crea. Cada vez que se escriben datos en la base de datos original, el valor anterior se escribe en la instantánea. Cuando se obtiene acceso a esta última, SQL Server trata a la instantánea y a los datos sin cambios de la base de datos original como a una sola base de datos. De esta manera, la instantánea, junto con los datos sin cambios de la base de datos original, es efectivamente un registro de la base de datos tal como existía en el momento en que se creó la instantánea. Para obtener más información, vea Database Snapshots.

Posibilidad de restaurar bases de datos personalizadas a partir de una instantánea

Si la solución de SharePoint Foundation de la compañía incluye una base de datos adicional hospedada por las ediciones Enterprise o Developer de SQL Server, puede dar de alta la base de datos en la infraestructura de SharePoint Foundation mediante el diseño de la clase que la representa para implementar la interfaz IDatabaseSnapshotRestore. Para obtener detalles acerca de cómo hacerlo, vea Procedimiento para crear una clase de base de datos que se puede restaurar desde una instantánea.

Las API de administración de instantáneas

Existen dos clases importantes en el modelo de objetos de SharePoint Foundation que se usan para la administración de instantáneas. Se tratarán en los dos subapartados siguientes.

SPDatabaseSnapshot

Los objetos de este tipo representan instantáneas. Solo existen como miembros de una colección SPDatabaseSnapshotCollection, la cual existe solo como el valor de la propiedad SPDatabase.Snapshots. Los miembros críticos de la clase SPDatabaseSnapshot se resumen a continuación. Vea los temas de referencia de cada uno (y de los otros miembros de la clase) para obtener más información.

  • Delete(): como indica el nombre, este método elimina la instantánea. Puede llamarse ad hoc, pero normalmente se llama por medio de un trabajo del temporizador que comprobará a intervalos si la instantánea ha alcanzado la antigüedad máxima permitida (MaximumRetention), o bien si se ha excedido la cantidad máxima (SnapshotLimit) de instantáneas permitida y la instantánea es la más antigua de la base de datos.

  • Restore(): este método invalida la base de datos con la instantánea y, posteriormente, elimina todas las instantáneas existentes de la base de datos. Una sobrecarga del método proporciona al código de llamada la opción de forzar una sobrescritura, incluso si la base de datos no implementa IDatabaseSnapshotRestore.

SPDatabaseSnapshotCollection

Los miembros críticos de la clase SPDatabaseSnapshotCollection se resumen a continuación. Vea los temas de referencia de cada uno (y de los otros miembros de la clase) para obtener más información.

  • CreateSnapshot(): este método hace que SQL Server cree una instantánea. Con cada operación de escritura subsiguiente en la base de datos, el servidor de bases de datos escribe el valor original en la instantánea. El método también establece EnabledManagement en true.

  • DeleteSnapshots(): este método elimina todas las instantáneas existentes de la base de datos.

  • RefreshSnapshots(): este método sincroniza la base de datos de configuración y la base de datos de contenido de SharePoint Foundation con respecto a las instantáneas para garantizar que todas las instantáneas que en realidad existen para la base de datos de contenido de SQL Server, y solo éstas, se registrarán en la base de datos de configuración. Como regla general, debe llamar a este método justo antes de que el código obtenga acceso a una instantánea por cualquier motivo, como un indizador, "sfdb.Snapshots[0]", donde sfdb es un objeto SPDatabase. Sin embrago, los propios métodos CreateSnapshot() y DeleteSnapshots() llaman a RefreshSnapshots().

  • EnabledManagement: cuando esta propiedad se encuentra establecida en true, indica que los trabajos del servicio de temporizador integrados de SharePoint Foundation que administran las instantáneas deben incluir a la base de datos primaria en su administración; por ejemplo, el trabajo normalmente crearía y eliminaría instantáneas de la base de datos a intervalos especificados. Cuando la propiedad se encuentra establecida en false, estos trabajos ignoran la base de datos. Si la solución de SharePoint Foundation incluye trabajos del temporizador de administración de instantáneas propios para ciertas bases de datos, debe establecer EnabledManagement en false para aquellas bases de datos; de lo contrario dos conjuntos de trabajos del temporizador crearán y eliminarán instantáneas de la misma base de datos y entrarán en conflicto. El método CreateSnapshot() establece esta propiedad en true.

  • CreationInterval: esta propiedad especifica la frecuencia (en horas) con la que se crea una nueva instantánea de la base de datos primaria.

  • MaximumRetention: esta propiedad especifica la duración (en horas) de la instantánea hasta que se elimine.

  • SnapshotLimit: esta propiedad especifica la cantidad máxima de instantáneas de la base de datos primaria que pueden existir en un momento dado.

Configuración de las instantáneas de una base de datos para la administración

Para configurar una base de datos de modo que se administre mediante el trabajo del temporizador de administración de instantáneas integrado incluido en SharePoint Foundation, ejecute el código que realice lo siguiente.

Para configurar una base de datos de modo que se administre mediante un trabajo del temporizador de administración de instantáneas personalizado, realice los mismos pasos, pero establezca la propiedad EnabledManagement en false.

Restauración a partir de una instantánea

Los pasos principales para restaurar una base de datos a partir de una instantánea mediante programación son los siguientes:

  1. Obtenga una referencia al objeto SPDatabase que representa la base de datos.

  2. Llame a RefreshSnapshots() para asegurarse de que trabaja con el conjunto de instantáneas actual de la base de datos. Por ejemplo, "sfdb.Snapshots.RefreshSnapshots();" donde sfdb es una referencia al objeto SPDatabase.

  3. Obtenga una referencia a la instantánea que desea usar para la restauración. Por ejemplo, para obtener una referencia a la instantánea más reciente, puede usar las siguientes líneas

    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. Llame a uno de los métodos Restore() para la instantánea. A continuación se muestra un ejemplo.

    spDBSnapshot.Restore();
    
    spDBSnapshot.Restore()
    

Implementación de un trabajo del temporizador de administración de instantáneas propio

Si desea desarrollar una aplicación de administración de instantáneas personalizada con el modelo de objetos de SharePoint Foundation, puede derivar la clase propia desde la clase SPJobDefinition. La tarea principal consiste en crear una invalidación del método Execute(Guid). En general, este método debería hacer lo siguiente:

  • Obtener una referencia al objeto SPDatabaseServiceInstance que hospeda las bases de datos.

  • Procesar una iteración de todos los miembros de la propiedad Databases del objeto y realizar lo siguiente:

    • Comprobar el valor de sfdb.Snapshots.EnabledManagement, donde sfdb es una referencia al objeto SPDatabase y no realizar ninguna acción si el valor es true. (Si es true, entonces los trabajos del temporizador de administración de instantáneas integrados de SharePoint Foundation administrarán las instantáneas de la base de datos.)

    • Para cada una de las bases de datos restantes, actualizar la lista de instantáneas mediante una llamada a RefreshSnapshots() y, posteriormente, eliminar las instantáneas cuya Age es mayor que el valor de la propiedad MaximumRetention.

    • Realizar otra llamada de RefreshSnapshots() y, a continuación, comparar la antigüedad de la instantánea más reciente (sfdb.Snapshots[sfdb.Snapshots.Count-1].Age) con el valor de CreationInterval. Si el primer valor es igual o mayor que el último, crear una nueva instantánea mediante una llamada a CreateSnapshot().

    • Realizar otra llamada de RefreshSnapshots() y, a continuación, comprobar si la cantidad total de instantáneas es mayor que SnapshotLimit. Si lo es, eliminar las instantáneas que sean necesarias para disminuir la cantidad total hasta alcanzar el límite. Eliminar la instantánea más antigua en primer lugar (sfdb.Snapshots[0]), posteriormente la que le sigue en un orden de antigüedad (sfdb.Snapshots[1]), etc.