Cabecera PRINCIPAL

Claves: técnico, redes, networks, microsoft, open source, gnu, programador, software, hardware, desarrolladores

Juan Enrique Gómez Péérez

jueves, 27 de enero de 2011

Backup casero para SQL Server

Todos los que nos movemos en este mundillo conocemos los agentes de Backup de diferentes fabricantes y los precios que se gastan. En muchas ocasiones en el caso de los SQL Server simplemente necesitamos una copia monda y lironda de la base de datos sin ninguna floritura más. Pagar el dinero que cuestan estos agentes en muchas ocasiones no está justificado, y me he encontrado con situaciones en las que el técnico hace cosas como parar la Base de datos para hacer el backup y luego arrancarla, con los consiguente problemas de tiempo, riesgo de que no arranque, etc. etc.


Por ello aquí va un pequeño método sobre como realizar un backup de SQL Server en caliente. El sistema funcionará de la siguiente manera, un fichero bat/cmd se ejecutará con la periodicidad indicada en nuestro programador de tareas, este fichero pasara una serie de parametros a un script SQL que nuestro servidor entenderá, y a su vez este script SQL llama a un procedimiento almacenado dentro del nuestro SQL Server que es el encargado de realizar el DUMP.


En primer lugar crearemos el script que llamará al procedimiento almacenado y le pasara los parametros, creamos un fichero por ejemplo llamado "fullbackup.sql":


USE [master]
exec expressmaint
@database = '$(DB)',
@optype = 'DB',
@backupfldr = '$(BACKUPFOLDER)',
@reportfldr = 'c:\backupBD\reports\',
@verify = 1,
@dbretainunit = '$(DBRETAINUNIT)',
@dbretainval = '$(DBRETAINVAL)',
@rptretainunit = ' copies',
@rptretainval = 2,
@report =1

Esta sentencia SQL lo que va a hacer es coger lo parametros que le pasemos cuando la llamemos con nuestro script o fichero BAT (se ven claramente los parametros que comienzan por $), y ejecutará el procedimiento almacenado que tenemos que subir como veremos ahora a nuestro sql server.



El fichero BAT que ejecuta este script es un modelo como sigue:


"c:\Archivos de Programa\Microsoft SQL Server\90\Tools\Binn\sqlcmd -S .\ -i"c:\BackupBD\fullbackup.sql" -v DB="BASEDEDATOS" -v BACKUPFOLDER="c:\BackupBD\BackupBBDD\" -v DBRETAINUNIT="days" -v DBRETAINVAL="1"


Por supuesto tendrás que adaptar las rutas de tu Script a tu entorno. Este comando tendrás que meterlo en un fichero .BAT que será el que des a tu programador de tareas para ejecutar.


Por último solo nos quedará, introducir el procedimiento almacenado en nuestro SQL Server, el que contiene la base de datos que queremos realizar copia:



- Abrimos nuestra herramienta de gestión de SQL Server, SQL Server Management Studio en mi caso, y sobre la base de datos [master] creamos un nuevo procedimiento almacenado:



Una vez que nos lo cree, tendremos que pegar dentro el contenido de este fichero, y el procedimiento almacenado se debe llamar "expressmain", si cambiaramos el nombre del procedimiento debemos corregirlo en el fichero "fullbackup.sql".


Procedimiento Almacenado


Una vez preparado, el sistema nos dejará listo por un lado la copia de seguridad de la base de datos en el directorio indicado (BACKUPFOLDER este parametro va en el .BAT) y un informe del estado de la copia de seguridad en el directorio de reportes (reportfldr, este parametro va en el fullbackup.sql).

[Actualización 05/02/2011]

He detectado un error en el fichero para la creación del procedimiento almacenado ya que el comando utilizado que estaba en la descarga es "ALTER" y debería ser "CREATE" ya lo tienes corregido en la descarga para bajar nuevamente.

Por otro lado algunos usuarios han detectado este problema al ejecutar el script:

Esto básicamente indica que la opción xp_cmdshell no está activada en el configurador de superficie del SQL Server, simplemente abrete el SQL Server Surface Configuration y en la opción de Configuración de Superficie para Caracteristicas, activas la casilla al lado de la opción "xp_cmdshell".


Espero que os sirva.

No hay comentarios: