sábado, 17 de febrero de 2007

“Snapshots” qué es y cuándo es utilizable


Una de las nuevas ventajas que tiene SQL 2005 es la posible utilización de “Snapshots”.

Esta nueva herramienta, que sólo se encuentra en SQL Server 2005 Enterprise Edition, permiten hacer copias de la base de datos, en formato sólo lectura, la cual se puede usar para, entre otros fines:

  • Reportes.
  • Auditorías.
  • Backups.


Actualmente esto se podía hacer utilizando las herramientas de backup, pero ahora se agiliza ampliamente con la utilización de estos “Snapshots”.

Cómo trabaja

El primer pensamiento es que esta herramienta hace una copia total de la base de datos, pero esto no es así, ya que si este fuera el caso, no ofrecería ninguna ventaja sobre los backups de las versiones anteriores de SQL Server.

En realidad trabajan en forma un tanto distinta. Cuando se genera, SQL realiza una marca en el archivo original de la base de datos y se genera un archivo separado completamente vacío que será utilizado para almacenar los datos antes de que estos sean modificaos en el archivo original. En el proceso se realizan dos pasos,

  • Actualización del snapshot, se copia la información que será modificada al archivo de backup para su resguardo.
  • Actualización de la base de datos, se ejecuta la acción deseada sobre la base de datos original..


    Para ejemplificar la agilidad de este método supongamos el siguiente ejemplo, hicimos un “Snapshot” y sólo se modificó el 10% de la información almacenada por la base de datos, en este caso si quisiéramos volver al de partida, el proceso soló implicaría la copia del 10% de la información y no de la totalidad como en versiones anteriores de SQL Server.

    A continuación vemos un gráfico que muestra la relación existente entre la información almacenada en uno y otro archivo.

Ventajas del proceso

  • Partiendo de la base de que sólo necesita trabajar con porciones de datos que sufrieron alteraciones, la creación y los procesos realizados sobre “Snapshots” serán mucho más rápidos que el anterior manejo de Backups.
  • Como los datos escritos en el archivo separado son sólo las porciones de datos que sufrieron modificaciones, el tamaño de disco utilizado, no es necesariamente el mismo que la base de datos original, permitiendo la creación de varios “Snapshots” utilizando muchísimo memos espacio en disco.
  • La escasa utilización de espacio en disco nos permitiría repetir el proceso con el fin de agilizar auditorias sobre la información.
  • Es considerablemente mas fácil de trabajar y mucho mas rápido que los anteriores Backups.
  • Posibilidad de generar reportes rápidos y con mínimo esfuerzo.
  • Datos corruptos o borrados pueden ser reparados o copiados desde el “Snapshot”.


Desventajas del proceso

  • Como los “Snapshots” siguen utilizando los archivos primarios de la base de datos y por este motivo, el utilizar un “Snapshot” no mejorará los tiempos necesarios en la realización de reportes, ya que los usuarios y UD utilizarán los mismos archivos.
  • Los “Snapshots” siguen atadas a la base de datos primaria, por lo que no se puede deshabilitar la base de datos. Si la base de datos no está online no se podrá acceder tampoco a los “Snapshots” que de esta dependan.
  • Sólo es una propiedad que tiene la versión “Enterprise Edition”.
  • Si los datos cambian rápidamente no se obtendrán los beneficios de “Snapshots” sobre backups.
  • Los “Snapshots” no soportan índices de texto completo.

Cómo se utiliza

Para crear un “Snapshot” no hay una sentencia determinada que sea soportada por el “Management Studio” de SQL 2005, la sentencia para crear una foto es la siguiente

CREATE DATABASE nombreDelSnapShot ON
( NAME = baseDeDatos,
FILENAME = ‘path destino’) AS SNAPSHOT OF baseDeDatos

La utilización de “Snapshots”, es esencialmente igual a la utilización de cualquier otra base de datos de nuestro servidor, sólo hay que recordar que es imposible rPublicarealizar modificaciones sobre dos datos que se encuentran almacenados en ella.

La eliminación es equivalente a las demás bases de datos de nuestro sistema, mientras que restaurar la base de datos al momento de creación del “Snapshot” es muy simple y rápido mediante la ejecución del siguiente comando
RESTORE DATABASE BaseDeDatos FROM DATABASE_SNAPSHOT = ‘nombreDelSnapShot’


Conclusiones



Como pudimos ver esta propiedad es muy sencilla de implementar y utilizar. Es posible crear una instancia, hacer algunas consultas sobre la misma y eliminarla en un par de minutos sin necesidad de trabajo arduo ni complicado.
No intenta reemplazar al Backup, son herramientas completamente diferentes para casos y escenarios distintos, solo que los “Snapshots” agilizan trabajos que antes requerían pesados Backups.