Backup para SQL Azure

SQLAzure_BackupUna de las preguntas que me hacen a diario es cómo se puede hacer un backup de una base de datos en SQL Azure. Y lo cierto es que hay muchas formas posibles de hacerlo cada una con sus ventajas e inconvenientes. Antes de entrar en ello, lo que sí que es importante señalar es que hagas o no backup, en SQL Azure tus datos están siempre seguros y disponibles gracias al mecanismo de replicas. Cada base de datos alojada en SQL Azure tiene siempre 3 réplicas: una réplica primaria y 2 réplicas secundarias. Todas las lecturas y escrituras se producen en la réplica primaria y luego se replican de forma asíncrona a las réplicas secundarias. En el caso de transacciones, no se dan por válidas hasta que la réplica principal y al menos una réplica secundaria confirman que la transacción se ha ejecutado con éxito. Esto es lo que se llama el quorum commit. Si quieres leer más sobre la infraestructura interna de SQL Azure te recomiendo este artículo.

A pesar de que todo lo anterior nos protege contra fallos de hardware, discos, etc. seguimos necesitando en la mayoría de los casos un sistema de copias de seguridad que nos proteja frente a errores de nuestra aplicación o de los usuarios y que nos permita restaurar una copia de nuestra base de datos en el hecha en el pasado. En el roadmap de SQL Azure está previsto disponer en el futuro inmediato de un mecanismo estándar de Backup & Restore accesible desde el portal de SQL Azure pero hasta que esto esté disponible mostraré las distintas alternativas que existen para hacer estas copias de seguridad.

Si no tienes tiempo para leer el post completo, mi resumen sería utilizar una combinación del método 1 y 3 para bases de datos siempre activas. Para bases de datos que pueden estar en offline, mi recomendación sería usar el método 3.

1) Crear una copia completa de la base de datos con “CREATE DATABASE .. AS COPY …”

En SQL Azure puedo utilizar el siguiente comando T-SQL:

CREATE DATABASE nombre_bbdd_destino

AS COPY OF [servidor_origen].nombre_bbdd_origen

Me creará una copia exacta a la base de datos original en el momento que termina el proceso de copia.

Ver más información.

Ventajas:

  • Muy sencillo. Basta con ejecutar un comando T-SQL
  • Para restaurar la base de datos basta con cambiar la cadena de conexión a la BBDD de destino
  • Muy rápido y sin costes de transferencia de datos ya que todo el proceso se desarrolla en la nube

Inconvenientes:

  • Su coste: Por cada copia que mantenga activa supone pagar una BBDD SQL Azure adicional.

 

2) Utilizar el SQL Azure Migration Wizard desde un servidor local

Mediante esta utilidad gratuita es posible extraer copias completas de la base de datos en SQL Azure en forma de ficheros que luego pueden ser restaurados de nuevo con el propio SQL Azure Migration Wizard. Esta utilidad tiene un interfaz gráfico pero además proporciona un ejecutable para realizar las copias por línea de comando y de estar forma poder automatizar nuestro proceso de backup. Creando un servicio Windows o una tarea programada, podría dejar programadas copias de seguridad desde un servidor local.

Ver más información.

Ventajas:

  • Disponer del SQL Azure Migration Wizard y su código fuente que permite personalizar este proceso según las necesidades específicas.
  • Basado en la utilidad BCP especialmente optimizada para cargas masivas de datos.

Inconvenientes:

  • Hay costes de transferencia de datos cada vez que se realiza una copia de seguridad desde SQL Azure a nuestro servidor local.
  • Si el tamaño de la base de datos es grande y no disponemos de un ancho de banda suficiente, el proceso de descarga de los datos puede ser lento.

 

3) Utilizar Data-tier Application (DAC) Framework

Mediante la nueva CTP de Microsoft SQL Server “Denali” DAC Framework 2.1 Feature Pack, ahora es posible exportar e importar el esquema y los datos de una base de datos en un único archivo con la extensión “.bacpac”. Hasta que no se lance “Denali” la nueva versión de SQL Server, será necesario instalarse estos componentes en el servidor desde el que vamos a lanzar el proceso para exportar los datos de SQL Azure. Es importante señalar que el fichero “.bacpac” generado no es transaccionalmente consistente ya que básicamente guarda un “SELECT *” de cada una de nuestras tablas. Si quiero utilizar DAC como mecanismo de backup, deberé primero crear una copia mediante el método 1) y posteriormente realizar la exportación desde esa copia. Una vez finalizada puedo ya eliminar la copia. Las exportaciones e importaciones se pueden realizar directamente desde el portal de gestión de Windows Azure en el menú de SQL Azure.

ImportExportCTP

La exportación también puede realizarse por código utilizando la librería Microsoft.SQLServer.Management.DAC.dll o puedo utilizar directamente la utilidad de línea de comando DacImportExportCli.exe. Un ejemplo de exportación desde SQL Azure sería:

DacImportExportCli.exe -s nombre_servidor.datababase.windows.net -d nombre_bbdd -f C:\CopiasSeguridad\nombreficheroexportacion.bacpac -x -u usuario@nombre_servidor –p contraseña

Ver más información.

Ventajas:

  • En un único archivo obtengo el esquema de mi base de datos con todos los datos.
  • Sencillo de utilizar.
  • Buen rendimiento.
  • Procedimiento estándar de importación/exportación de datos en SQL Server/Azure.
  • Sin coste de transferencia de datos. Puedo hacer un backup directamente al Storage de Azure.

Inconvenientes:

  • Todo el proceso de exportación es atómico y no hay opción de reintentos por lo que si hay algún problema durante la exportación como un corte de conexión, será necesario volver a reintentar el proceso desde el inicio.
  • Actualmente en CTP.
4) Sincronizar mediante SQL Azure Data Sync

Aunque no es propiamente un sistema de copias de seguridad, SQL Azure Data Sync permite mantener sincronizada una base de datos en SQL Azure con otra base de datos SQL Server o SQL Azure. Si queremos utilizar Data Sync como mecanismo de copia de seguridad se podría sincronizar la base de datos en SQL Azure con una base de datos SQL Server local en modo unidireccional. Data Sync se encargaría de mantener ambas sincronizadas con el intervalo que nosotros definamos (desde 5 minutos en adelante). Luego bastaría ir realizando backups periódicos de nuestro servidor SQL Server local de la forma habitual.

Ver más información.

Ventajas:

  • Permite automatizar completamente el proceso de backups.
  • Sencillo de utilizar.
  • Buen rendimiento.
  • Si se corta la conexión durante el proceso de backup, el programa es capaz de retomar el proceso desde el punto donde se quedó.
  • Durante la CTP el servicio es gratuito.

Inconvenientes:

  • Hay costes de transferencia de datos cada vez que se realiza una copia de seguridad desde SQL Azure a nuestro servidor local.
  • SQL Azure Data Sync crea tablas de sincronización en las bases de datos por lo que el tamaño de las mismas aumentará.
  • Si el tamaño de la base de datos es grande y no disponemos de un ancho de banda suficiente, el proceso de descarga de los datos puede ser lento.
  • Actualmente en CTP2 por lo que Microsoft no proporciona soporte.
5) Utilizar SQL Azure Backup de Red Gate

SQL Azure Backup es un sencillo programa que permite copiar el esquema y los datos de una base de datos SQL Azure a una instancia local de SQL Server o directamente al Storage de Azure. Una vez tengo la copia puedo, si quiero, realizar una copia de seguridad estándar y almacenarla. SQL Azure Backup sólo realiza copias de seguridad completas. El producto es gratuito. Si quiero realizar copias incrementales entonces Red Gate ofrece otros productos llamado SQL Compare y SQL Data Compare que ahora también soportan SQL Azure.

Ver más información.

Ventajas:

  • En un único proceso obtengo una copia exacta de mi base de datos en local.
  • Sencillo de utilizar.
  • Buen rendimiento.
  • Si se corta la conexión durante el proceso de backup, el programa es capaz de retomar el proceso desde el punto donde se quedó.
  • Permite guardar el backup directamente en el Storage de Azure.
  • Puedo automatizar las copias de seguridad utilizando un SQL Agent en local.
  • El programa es totalmente gratuito.

Inconvenientes:

  • Si quiero que todo el proceso esté automatizado y se ejecute 100% en la nube tendría que hacer un pequeño desarrollo para lanzar el SQL Azure Backup por línea de comandos desde un Worker Role por ejemplo.
6) Backup por línea de comandos con la utilidad de Cerebrata

Cerebrata dispone de un producto llamado Azure Management Cmdlets que básicamente son un conjunto de Cmdlets de PowerShell con los que puedo automatizar la gestión de mis servicios en la Plataforma Windows Azure. Entre estos Cmdlets hay uno que permite realizar una copia de seguridad de de los datos de SQL Azure, almacenándolos en el servidor local y también, opcionalmente, permite posteriormente almacenar estos datos en un blob de Azure Storage.

Ver más información.

Ventajas:

  • Basado en la utilidad BCP especialmente optimizada para cargas masivas de datos.
  • Es posible programarlo para que se lance desde un Worker Role en Windows Azure a intervalos periódicos.
  • Permite almacenar la copia de los datos en local y también en el Storage de Windows Azure
  • Permite comprimir los datos y ahorrar tiempo y costes al almacenar los datos en el Storage de Windows Azure.
  • Bajo coste del componente.

Inconvenientes:

  • Hay costes de transferencia de datos cada vez que se realiza una copia de seguridad desde SQL Azure a nuestro servidor local.
  • Si el tamaño de la base de datos es grande y no disponemos de un ancho de banda suficiente, el proceso de descarga de los datos puede ser lento.
  • No es proceso completo de copia de seguridad ya que sólo mueve datos y no los objetos de la BBDD como vistas, procedimientos almacenados, etc. Deberé realizar también una copia del esquema de la base de datos.
7) Utilizar la utilidad BCP2SQLAzure

Esta sencilla utilidad gratuita desarrollada por Solid.Q no es realmente una herramienta de copia de seguridad pero permite realizar cargas masivas de datos entre servidores SQL Server / SQL Azure. Básicamente funciona igual que BCP.EXE pero permite cifrar las contraseñas y configurar todo el proceso de copia mediante un XML. Al disponer del código fuente de la solución se puede integrar fácilmente en una solución existente o también automatizar cargas masivas programando la tarea.

Ver más información.

Ventajas:

  • Disponer del BCP2SQLAzure y su código fuente que permite personalizar este proceso según las necesidades específicas.
  • No requiere tener instalado BCP.EXE en el servidor que ejecuta esta utilidad.
  • Optimizado para grandes volúmenes de datos.
  • Es posible programarlo para que se lance desde un Worker Role en Windows Azure a intervalos periódicos.

Inconvenientes:

  • Hay costes de transferencia de datos cada vez que se realiza una copia de seguridad desde SQL Azure a nuestro servidor local.
  • Si el tamaño de la base de datos es grande y no disponemos de un ancho de banda suficiente, el proceso de descarga de los datos puede ser lento.
  • Debo especificar en el XML cada tabla de la que quiero hacer copias.
  • No es proceso completo de copia de seguridad ya que sólo mueve datos y no los objetos de la BBDD como vistas, procedimientos almacenados, etc.

 

8) Proceso de backup 100% en la nube

Hasta ahora, salvo el método 1 y el 3,el resto requieren disponer de un servidor local que es el que realiza la copia de seguridad. Pero con algo de desarrollo, es posible crear una solución de backup en la que el proceso se desarrolle en Windows Azure, se pueda automatizar y las copias queden almacenadas en el Storage de Windows Azure para poder restaurarlas de manera sencilla.

Algunas opciones:

A) Utilizar Data-tier Application (DAC) Framework desde Azure

Utilizaremos la técnica descrita en el método 3 pero adaptada a funcionar 100% desde Windows Azure de forma automatizada. Más información en este ejemplo de MSDN.

B) Almacenar una copia serializada de la base de datos en el Storage

Podemos utilizar el método 1 y luego realizar una copia serializada de esa base de datos para almacenarla en el Storage de Windows Azure. Todo el proceso podría programarse para ejecutarse desde un Worker Role. Más información en este artículo.

C) Utilizar Enzo Backup for SQL Azure

Interesante utilidad de copia de seguridad de bases de datos SQL Azure. Este programa permite su despliegue en un Worker Role de forma que todo el proceso de backup se realiza en Windows Azure. Es posible también automatizarlo mediante línea de comando. Más información.

D) Copia de seguridad con BCP desde un Worker Role

Consistiría en desarrollar un proceso que se lance desde un Worker Role y exporte todos los datos de la base de datos en SQL Azure utilizando BCP.EXE. Alternativamente se podría utilizar la utilidad de línea de comandos del SQL Azure Migration Wizard (SQLAzureMWBatchBackup) para facilitar el desarrollo. También se podría utilizar el Cmdlet de Cerebrata. Es importante reseñar que para utilizar BCP desde un Worker Role, será necesario antes instalar esta herramienta mediante una Startup Task en el rol. Deberemos instalar estos componentes (en esta página están los instalables):

- Microsoft® SQL Server® 2008 R2 Command Line Utilities (x64)

- Microsoft® SQL Server® 2008 R2 Native Client (x64)

La instalación deberá ser en modo silencioso utilizando msiexec.exe con el parámetro /quiet o /q. Más información aquí. Es un proceso similar al ejemplo A).

Conforme se van obteniendo los datos por BCP, habría que programar otra tarea que los almacenara en el Storage de Windows Azure. Si tenemos el servidor SQL Azure, la instancia del Worker Role y la cuenta de Storage en el mismo data center, no habrá que pagar ningún coste de transferencia de datos y además el proceso será muchísimo más rápido.

Aquí podemos descargar un ejemplo de lo anterior.

Ventajas:

  • No hay costes de trasferencias de datos.
  • Proceso rápido ya que toda la comunicación es interna al data center.
  • No es necesario disponer de infraestructura local.
  • Proceso escalable y con alta disponibilidad.
  • Es posible programarlo para que se lance desde un Worker Role en Windows Azure a intervalos periódicos.

Inconvenientes:

  • Requiere esfuerzo de desarrollo.
  • Costes de horas de computación del Worker Role.

 

Cómo siempre espero que haya sido de utilidad.

ACTUALIZACIÓN (24/10/2011): Incluido el nuevo SQL Azure Import/Export CTP