Snapshots de bases de datos SQL Server

Los Snapshots nos permiten crear una copia de nuestras bases de datos en un momento determinado y acceder a estos datos en modo solo lectura.

En este artículo vamos a explicar qué son los snapshots de base de datos en SQL Server y cómo pueden ayudarnos a mejorar el rendimiento y la disponibilidad de nuestros sistemas. Los snapshots son una forma de crear una imagen instantánea de una base de datos en un momento determinado, sin necesidad de realizar una copia física de los datos. Esto es muy útil ya que nos permite crear una imagen de solo lectura de una base de datos en un momento determinado. Nos permite acceder a los datos tal y como estaban en el momento del snapshot, sin afectar a las operaciones normales de la base de datos.

¿Qué son los snapshots de base de datos y para qué sirven?

Un snapshot de base de datos es una vista estática de una base de datos que captura el estado de los datos y el esquema en el momento de su creación. Un snapshot se almacena en un archivo especial llamado archivo disperso (sparse files), que solo contiene las páginas modificadas desde la creación del snapshot. Esto significa que un snapshot ocupa muy poco espacio y se crea casi instantáneamente. De esta forma, cuando accedemos a un snapshot, SQL Server lee los datos directamente de la base de datos original, salvo que haya habido algún cambio, en cuyo caso lee los datos del archivo disperso.

Ventajas los snapshots de base de datos

Los snapshots de base de datos tienen varias ventajas:

  • Nos permiten acceder a los datos históricos sin afectar al rendimiento ni a la disponibilidad de la base de datos original.
  • Nos facilitan la recuperación ante errores humanos, como borrados o actualizaciones accidentales, ya que podemos restaurar la base de datos original a partir del snapshot.
  • Nos ayudan a realizar tareas de mantenimiento o pruebas sin riesgo, ya que podemos trabajar sobre el snapshot sin modificar la base de datos original.
  • Nos ofrecen una forma sencilla de realizar copias de seguridad consistentes con la aplicación, ya que podemos hacer una copia de seguridad del snapshot en lugar de la base de datos original.

Limitaciones de los snapshots de base de datos

Los snapshots de base de datos también tienen algunas limitaciones que debemos tener en cuenta:

  • Solo se pueden crear sobre bases de datos que usen el modelo de recuperación completo o el modelo bulk-logged.
  • No se pueden crear sobre bases de datos del sistema ni sobre bases de datos que contengan tablas con columnas FILESTREAM o columnstore.
  • No se pueden modificar ni actualizar, solo se pueden consultar en modo lectura.
  • No se pueden hacer copias ni traslados, solo se pueden eliminar o restaurar.
  • No se pueden usar para replicar ni distribuir los datos a otras bases de datos o servidores.
  • No garantizan la consistencia transaccional ni la integridad referencial entre las bases de datos relacionadas.

¿Cómo crear un snapshot de base de datos?

Para crear un snapshot de base de datos en SQL Server necesitamos tener permisos de administrador o pertenecer al rol db_owner. Además, la base de datos original debe estar en línea y no debe tener ninguna operación pendiente, como una restauración o una copia.

El comando para crear un snapshot es el siguiente:

CREATE DATABASE <nombre_snapshot> ON (NAME = <nombre_archivo_logico>, FILENAME = ‘<ruta_archivo_disperso>’) AS SNAPSHOT OF <nombre_base_de_datos>;

Podemos crear varios snapshots de la misma base de datos, siempre que les demos nombres distintos y archivos dispersos diferentes. También podemos especificar más de un archivo disperso si la base de datos original tiene más de un archivo lógico.

¿Cómo acceder a un snapshot de base de datos?

Para acceder a un snapshot de base de datos podemos usar cualquier herramienta o aplicación que se conecte a SQL Server, como el Management Studio o el SQLCMD. Solo tenemos que usar el nombre del snapshot como si fuera una base de datos normal. Por ejemplo, para consultar el snapshot que acabamos de crear podemos usar el siguiente comando:

USE  <nombre_snapshot>; 

SELECT * FROM <tabla>;

Al acceder a un snapshot, SQL Server lee las páginas directamente del archivo disperso si han sido modificadas desde la creación del snapshot, o del archivo original si no han sido modificadas. Esto implica que el rendimiento puede verse afectado si hay muchas modificaciones en la base de datos original.

¿Cómo restaurar una base de datos a partir de un snapshot?

Una de las principales utilidades de los snapshots es poder restaurar una base de datos a un estado anterior en caso de error o necesidad. Para ello, tenemos que usar el comando RESTORE DATABASE WITH SNAPSHOT. Este comando elimina la base de datos original y la reemplaza por el snapshot, conservando el nombre y los archivos originales. El comando es el siguiente:

RESTORE DATABASE <nombre_base_de_datos> FROM DATABASE_SNAPSHOT = <nombre_snapshot>;

Al restaurar una base de datos desde un snapshot, SQL Server aplica las páginas modificadas desde el archivo disperso al archivo original, y elimina el archivo disperso y el snapshot. Este proceso puede tardar más o menos tiempo dependiendo del tamaño y el número de páginas modificadas.

¿Cómo eliminar un snapshot de base de datos?

Si ya no necesitamos un snapshot de base de datos, podemos eliminarlo usando el comando DROP DATABASE. Este comando elimina el snapshot y el archivo disperso asociado, liberando el espacio ocupado. El comando es el siguiente:

DROP DATABASE <nombre_snapshot>;

Al eliminar un snapshot, SQL Server no afecta a la base de datos original ni a los otros snapshots que pueda tener.

 Conclusión

Los snapshots de base de datos en SQL Server son una herramienta muy poderosa que nos permite crear imágenes de solo lectura de una base de datos en un momento determinado, con un mínimo consumo de espacio y tiempo. Los snapshots nos facilitan el acceso a los datos históricos, la recuperación ante errores, el mantenimiento y las pruebas, y la realización de copias de seguridad consistentes. Para crear, acceder, restaurar y eliminar snapshots solo necesitamos unos pocos comandos que podemos ejecutar desde cualquier herramienta o aplicación que se conecte a SQL Server.

Espero que este artículo te haya resultado útil e interesante. Si tienes alguna duda o comentario, no dudes en contactarnos en Twitter o por mail o dejarnos un mensaje en los comentarios de aquí abajo. Y recuerda que también tenemos un grupo de LinkedIn al que te puedes unir.

Publicado por Roberto Carrancio

Mi nombre es Roberto Carrancio y soy un DBA de SQL server con más de 10 años de experiencia en el sector. Soy el creador del blog soydba.es donde intento publicar varios artículos a la semana (de lunes a viernes que los fines de semana me gusta estar con mi gente y disfrutar de mi moto) Espero que disfrutes leyendo este blog tanto como yo disfruto escribiendo y que te sea de utilidad. Si tienes alguna sugerencia, pregunta o comentario, puedes dejarlo al final de cada entrada o enviarme un correo electrónico. Estaré encantado de leerte y responderte. ¡Gracias por tu visita! Mi principal interés es compartir mi conocimiento sobre bases de datos con todo el que quiera aprenderlo. Me parece un mundo tan apasionante como desconocido. Fuera de lo profesional me encanta la cocina, la moto y disfrutar de tomar una cervecita con amigos.

Deja una respuesta