Blog

Backups automáticos en SQL Server 2005

Cómo realizar backups automáticos con línea de comandos en SQL Server 2005.

Marcelo Ruiz, 28/08/2009

Hasta el día de hoy, no había tenido jamás la necesidad de acceder a SQL Server por línea de comando, aunque había trabajado accediendo a bases de datos de esta forma en varias oportunidades con MySQL y Oracle. Supuse que una herramienta así debería existir, y así es: para los que no lo conocen, el programa SQLCMD se instala con SQL Server en la carpeta C:\Archivos de programa\Microsoft SQL Server\90\Tools\Binn.

La necesidad de esta herramiento surgió porque necesitaba implementar la realización de copias de seguridad para un cliente y es el tip que voy a compartir hoy con ustedes. Para configurar este proceso se necesita lo siguiente:

  1. Crear un script SQL que realice la copia de seguridad.
  2. Crear un archivo batch que ejecute el SQLCMD y el script SQL.
  3. Crear una tarea programada en Windows para que llame al archivo batch con la regularidad deseada.

El script backup.SQL

Este script realiza un backup de la base de datos de una forma muy sencilla:

  1. Setea la base de datos en modo SINGLE_USER.
  2. Realiza la copia de seguridad.
  3. Vuelve a setear la base de datos en modo MULTI_USER.

Sin más preambulos, los dejo con el script:

DECLARE @fecha VARCHAR(50) 
DECLARE @archivo VARCHAR(50) 
SET @fecha = CONVERT(VARCHAR(4), YEAR(GETDATE()))+'-'+ CONVERT(VARCHAR(2), MONTH(GETDATE()))+'-'+CONVERT(VARCHAR(2), DAY(GETDATE())) 
SET @archivo = 'C:\tmp\BD_'+ @fecha +'.bak' 
ALTER DATABASE BD SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
BACKUP DATABASE BD TO DISK = @archivo 
ALTER DATABASE BD SET MULTI_USER 
GO 
EXIT 

Lo único que deberán tener en cuenta es crear la carpeta C:\tmp con permisos de escritura para el usuario Servicio de Red y reemplazar BD por el nombre de la base de datos que desean resguardar.

El archivo batch backup.bat

Este archivo se encarga de llamar al SQLCMD y pasarle el script que vimos anteriormente:

SQLCMD -S(local)\SQLEXPRESS -E -i"C:\backup.sql" "C:\Archivos de programa\WinRAR\rar" a BACKUP.rar c:\TMP*.* ECHO S | DEL c:\TMP Observen que la forma de conectarse al servidor, en la primera línea se especifica con el flag -S, seguido del nombre del Servidor, en mi caso (local)\SQLEXPRESS. Luego, el flag -E indica conexión con autenticación de Windows. Finalmente con el flag -i se especifica el archivo SQL a ejecutar. Pueden obtener más información sobre SQLCMD en este artículo de Database Journal.

En la segunda línea procedemos a comprimir los archivos del backup, que se encuentran en la carpeta C:\TMP. Para esto utilizamos WinRAR (que deberían descargar si quieren utilizar esto). Finalmente borramos todo el contenido del directorio C:\tmp. Tengan en cuenta que si no quieren comprimir, también deben eliminar esta línea.

Configuración de la tarea programada Programar tareas para su ejecución en Windows es muy sencillo, por lo que no me voy a explayar mucho. Simplemente vayan a: Panel de Control/Tareas Programadas/Agregar tarea programada y sigan los pasos del asistente. El archivo que deberían seleccionar para ejecutarse es backup.bat y la frecuencia es a su gusto y necesidad.

Publique su comentario

anti-spam

Comentarios

xinxin! 2009-11-17 00:00:00

buena solucion!

Pavel 2010-01-04 00:00:00

Genial, gracias!

johnnybelo 2010-01-26 00:00:00

Gracias por el aporte!

saludos...

Pablo 2010-06-09 00:00:00

Excelente la solución, solo una consulta: como hago para que al ejecutar el arch .bat, no salga la ventana negra de dos? Muchas Gracias

Javier Fernando Rojas Chavez 2010-08-17 00:00:00

Excelente solución...