Programando backups automáticos y periódicos en SQL Server

Publicado el 27.08.2023 a las 21:42

Programando backups automáticos y periódicos en SQL Server

  1. ¿Cómo se programa un backup automático en Microsoft SQL Server?

  2. ¿Programando una tarea repetitiva en Windows?

    • Usando herramientas nativas de Windows

    • Usando herramientas para cualquier Sistema Operativo

  3. Copiando el backup en la red

Programando backups automáticos y periódicos en SQL Server

Logo de fjmduran

Es importantísimo tener copias de seguridad de tus datos, y esas copias de seguridad deben ser automáticas y periódicas.


No sé, imagina que se inunda una sala donde tienes varios servidores.

Te garantizo por experiencia que esos escenarios son reales 😥


El daño sufrido no solo es el daño material de los equipos que queden estropeados, tienes que tener en cuenta el coste de perder todo el trabajo sobre esos equipos, que en ocasiones es muchísimo mayor que el coste del material.


Tener copias de seguridad es fundamental para evitar pérdidas de información.

¿Cómo se programa un backup automático en Microsoft SQL Server?

Para crear copias de seguridad o backups de forma automática utilizaremos sqlcmd.


sqlcmd es una herramienta de consola proporcionada por Microsoft SQL Server.


Uso sqlcmd para interactuar con instancias de bases de datos SQL Server mediante comandos y scripts SQL directamente desde la consola.


Esta herramienta es muy conocida entre administradores de bases de datos y desarrolladores que necesitan ejecutar consultas, comandos y scripts de manera automatizada.


El script SQL que creará un backup es:

BACKUP DATABASE [nombre_base_de_datos] TO DISK = N'ruta_local\nombre_backup.bak' WITH NOFORMAT, NOINIT, NAME = N'nombre_base_de_datos-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

El script anterior lo puedes obtener con el Microsoft SQL Server Managment Studio.

Creando un backup con el Microsoft SQL Server Managment Studio

Para ejecutar el script anterior con sqlcmd usa:

sqlcmd -S instancia_de_base_de_datos -d nombre_base_de_datos -U usuario -P contraseña -Q "script_backup"

Imagina los siguientes parámetros:

  • Nombre de instancia de base de datos: \SQLEXPRESS
  • Nombre de base de datos: MISDATOS
  • Usuario: USER
  • Constraseña: PASSWORD
  • Ruta donde guardar mi backup: C:\backup\
  • Nombre del fichero de backup: MIFICHERO

Con los parámetros anteriores, el script para correr desde sqlcmd quedaría:

sqlcmd -S localhost\SQLEXPRESS -d MISDATOS -U USER -P PASSWORD -Q "BACKUP DATABASE [MISDATOS] TO DISK = N'C:\backup\MIFICHERO.bak' WITH NOFORMAT, NOINIT, NAME = N'MISDATOS-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

Ahora crea un fichero .bat con la línea anterior 🔥

¿Programando una tarea repetitiva en Windows?

Ahora lo que queremos es que el script anterior se ejecute automáticamente, para ello:

Programando una tarea repetitiva en Windows con el Programador de tareas

Como casi cualquier programa de Microsoft, es muy fácil usarlo.


Para abrirlo busca en tus programas el Programador de tareas

Programador de tareas en Windows

A continuación elige crear una nueva tarea.

Programador de tareas en Windows, nueva tarea

Elige cada cuanto quieres que se ejecute el backup

Programador de tareas en Windows, periodicidad

Elige día y hora si procede.


Y en iniciar programa elige el fichero .bat que creamos en el punto anterior.

Programador de tareas en Windows, elige programa

Listo, ya tienes tu backup programado en Windows 🎉

Programando una tarea repetitiva en Windows con herramientas universales en otros Sistema Operativos

Te recomiendo en este punto usar los Cron Job que son nativos tanto en Linux como el Mac.


Si te instalas bash en tu Windows también te funcionará.


Para más detalle acerca de qué son y cómo programar los Cron Jobs te dejo el siguiente artículo.

Imagen del artículo

Crear tareas repetitivas

Crear tareas repetitivas o cron jobs

Copiando el backup en la red

Tienes que tener en cuenta una cosa, hasta ahora te he explicado cómo crear una copia de seguridad en local, pero si el servidor se te escropea, concretamente el disco duro de nada te servirá dicha copia de seguridad.


Deberás de tener esa copia de seguridad en más ubicaciones para garantizar que ante un desastre en el servidor tenga los datos de backup en otro.


Podrías indicarle en el script que te explico del punto uno que en lugar de hacer el backup en local lo hiciera en la red, pero en mi caso el usuario de SQL Server con el que ejecuto el sqlcmd no tiene privilegios de red, por lo que no puede copiar en red.


¿Cómo lo he resuelto?

Añadiendo al fichero .bat donde tengo el script de backup la siguiente línea:

copy "ruta_fichero_backup_local" "ruta_fichero_backup_en_red"

Imagina los siguiente parámetros:

  • Ruta local donde está mi backup: C:\backup\
  • Nombre del fichero de backup: MIFICHERO
  • Ruta en red donde quiero mi backup: \\datos\server\

El script para copiar quedaría:

copy "C:\backup\MIFICHERO.bak" "\\datos\server\MIFICHERO.bak"

Y vualá, si añadir este script al fichero .bat del punto 1 te quedará:

sqlcmd -S localhost\SQLEXPRESS -d MISDATOS -U USER -P PASSWORD -Q "BACKUP DATABASE [MISDATOS] TO DISK = N'C:\backup\MIFICHERO.bak' WITH NOFORMAT, NOINIT, NAME = N'MISDATOS-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

copy "C:\backup\MIFICHERO.bak" "\\datos\server\MIFICHERO.bak"

Y cada vez que se ejecute el .bat, ya sea manualmente, con el programador de tareas de Windows o con un Cron Job, se creará en local el backup y a continuación se copiará en la red.


Hasta luego 🖖