miércoles, 1 de agosto de 2012

Backup en linea de comandos de una base de datos SQL Server

Una de las tareas que deberíamos hacer, ya no como desarrolladores si no como administradores son los backups de nuestras bases de datos. Da igual que sea SQL Server, Oracle o cualquer otro sistema. El hacerlas nos evitará muchos quebraderos de cabeza. Voy a enseñar un forma fácil de hacer los backups mediante linea de comandos de una base de datos SQL Server.

Y alguno de vosotros pensará: ¿Porque hacerlo mediante la linea de comandos si puedo hacer con el SQL Server Managment Studio?. Sencillo: podemos programar una tarea periodica que haga las copias de seguridad por nosotros. Para hacer esto lo mejor es programar un script que haga el backup en linea de comandos y que la tarea progrmada llame al script. Es lo que vamos a ver en este artículo.

Primero vamos a preparar el script que nos permita hacer el backup de la base de datos SQL Server mediante la linea de comandos. Podemos empezar creando un directorio ( por ejemplo C:\backupbd ). En este directorio almacenaremos el script y las copias de seguridad de nuestra base de datos. Lo ideal es que este directorio esté en un sitio de red, o en algún sitio fuera del equipo que tiene la base de datos. Si se "incencia" el equipo no perderemos las copias de seguridad je je je.

Para hacer una copia de seguridad usaremos el comando de T-Sql BACKUP DATABASE. Tiene bastrantes parámetros (poodéis verlos con detalle en la documentación de msdn) pero para este ejemplo lo usaremos de esta manera:

  BACKUP DATABASE [NOMBRE] TO DISC = N'RUTA' WITH COMPRESSION, NOFORMAT, INIT, NAME=N'DESCRIPCION' , SKIP, NOREWIND, NOUNLOAD,  STATS = 10
Un par de explicaciones:
  • <Nombre>: Es el nombre de la base de datos de la que queremos hacer el backup. Debe ir entre corchetes. 
  • N'RUTA': Escribiremos la ruta completa del archivo de copia de seguridad. En nuestro caso será por ejemplo: N'C:\backupdb\copia.bk'. Una aclaración: deberñemoos poner N' delante para especificar la ruta. 
  • COMPRESSION: Nos permite realizar una compresión de la copia de seguridad.
  • NAME=: Es una cadena con una descripción para la copia. 

La opción COMPRESSION es una caracteristica que solo está disponible a partir de SQL Server 2008 y solamente para las versiones Empresarial y Developer. En SQL Server Express, Workgoup y Standar, no podremos usar la caracteristica de compresión de las copias de seguridad.

Hasta aqui la parte teórica para entender como funciona BACKUP DATABASE, por si alguno no lo sabía. Prácticamente podemos generar la sentencia desde SQL Server Managment Studio mediante la opción "Generar Script" que se encuentra en la parte superior de la pantalla de copia de seguridad del Managment Studio.


Ejecución del script

Una vez generado el script, lo guardamos en el directorio de copia con el nombre 'script.sql' (o como queramos, la cosa es acordarse después del nombre del archivo).

Después simplemente cogemos nuestro editor de texto preferido, creamos un archivo .bat (si os acordáis, los archivos de secuencia de comandos del MSDOS ) con la siguiente sentencia de linea de comandos:

SQLCMD -S SERVIDOR-SQL -i C:\backupdb\script.sql

Guardamos el archivo bat en el mismo directorio que el script con el nombre "backup.bat". Ejecutando este archivo, podermos realizar la copia de seguridad.

Backup periódica de la base de datos

 Esta parte ya es opcional, pero una aplicación interesante de lo que hemos hecho en este artículo es poder automatizar la copia de la base de datos periódicamente. Esto lo podemos conseguir haciendo una tarea programada en windows. Voy a explicar el proceso, que es muy sencillo, para Windows 2008 Server. En Windows 7 se hace de la misma manera.

Primero vamos al programador de tareas y creamos una tarea básica. Nos aparecerá un asistente donde nos pedirá el nombre y la descripción de la tarea así como la frecuencia de ejecución. Cuando nos pregunte por la acción a realizar debemos decirle que queremos iniciar un programa.

Seleccionando esta opción nos pedirá la ruta del programa a ejecutar. Aqui seleccionaremos el archivo .bat que hemos creado en el apartado anterior.

También podemos hacer este proceso sin usar un archivo .bat. Simplemente programando la tarea para que ejecute el comando SQLCMD del apartado anterior, que hace la copia de seguridad. Esto se hace especificando el comando anterior en el campo del programa a iniciar.

Espero que este artículo os sirva de ayuda. Ahora no tenéis excusa para hacer copia de seguridad de vuestras bases de datos.

3 comentarios:

  1. Para realizar el respaldo de una base de datos en Red desde otro equipo es necesario que nadie la este utilizando? o se puede realizar el respaldo sin importar el que esté en uso la DB?

    ResponderEliminar
    Respuestas
    1. Hola Lazaro. En un principio puedes realizar el resplado sin importar que esté en uso la base de datos, quiero decir, que el sistema no se va a quejar y SQL Server lo va a dejar hacer.

      Sin embargo, si que es verdad que si vas a hacer el backup completo, es recomendable hacerlo cuando haya poca carga en la red, dado que es un proceso que consume bastantes recursos de E/S.

      Un saludo compañero.

      Eliminar
  2. Me piden en mi carrera de analista un Back Up proporcionado segunb una medida determinada, osea, el cliente cuando ordena el back up, le pregunta de que medida lo desea particionar -en megabit por ejemplo, y asi lo hace , lo parte en pedazos por ejemplo de un mega bit o 10 o cien,. la pregunta es , como lo hago? se hacer back ups completos -y restaurarlos. Gracias

    ResponderEliminar