martes, 2 de diciembre de 2014

SQL EXPRESS y el problema del BACKUP AUTOMATICO


Hoy vamos a incorporar una entrada que seguramente le será útil a más de uno que esté utilizando SQL EXPRESS como servidor de base de datos, el gran problema que nos encontramos con este motor de base de datos, es la ausencia del agente, y por lo tanto no podemos automatizar nuestros procesos de respaldo con el planificador.

Sin embargo, con un pequeño script, y un archivo de ejecución por lote podemos conseguir, en el caso del respaldo, el mismo resultado que utilizando el agente, nada más que en vez de utilizar el planificador de SQL, utilizaremos el planificador de Windows.

Lo primero que tendremos que hacer, es generar un archivo con extensión SQL, este archivo contendrá nuestro script y lo armaremos de tal forma que modificarlo para diferentes utilidades sea muy sencillo.


--BACKUP DE TODAS LAS BASES

PRINT 'REALIZO BACKUP DE TODAS LAS BASES' 

DECLARE @NOMBRE                 VARCHAR(50) 
DECLARE @UBICACION              VARCHAR(256)   
DECLARE @NOMBRE_ARCHIVO         VARCHAR(256)  
DECLARE @FECHA_ARCHIVO          VARCHAR(20) 
  
-- Especifico la ubicacion del directorio de respaldo

SET @UBICACION = 'C:\bases\'   

-- Me grabo en variable la fecha que contendra todas las bases que estaremos respaldando

SELECT @FECHA_ARCHIVO = CONVERT(VARCHAR(20),GETDATE(),112)   

DECLARE VAL_CURSOR CURSOR FOR  

SELECT NAME FROM master.dbo.sysdatabases  
WHERE NAME NOT IN ('master','model','msdb','tempdb')   -- Incorporo las bases de datos que NO QUIERO RESPALDAR 

--RECORRO EL CURSOR Y GENERO LOS RESPALDOS UTILIZANDO EL SIGUIENTE BUCLE

OPEN VAL_CURSOR   

FETCH NEXT FROM VAL_CURSOR INTO @NOMBRE    
  
WHILE @@FETCH_STATUS = 0   
BEGIN   
    --GRABO EN VARIABLE EL NOMBRE DEL ARCHIVO FINAL
    SET @NOMBRE_ARCHIVO = @UBICACION + @NOMBRE + '_' + @FECHA_ARCHIVO + '.BAK'  

    --INSTANCIO LA SENTENCIA PARA GENERAR EL BACKUP EN DISCO
    BACKUP DATABASE @NOMBRE TO DISK = @NOMBRE_ARCHIVO   
    FETCH NEXT FROM VAL_CURSOR INTO @NOMBRE   
END     

--LIBERO EL CURSOR DEL SERVIDOR

CLOSE VAL_CURSOR   
DEALLOCATE VAL_CURSOR
 
GO

Podemos ejecutar dicho script por consola, el mismo tiene que guardar en el destino configurado todos los respaldos no excluidos.
Una vez realizado este script y probado lo guardamos en la carpeta correspondiente, como por ejemplo ‘\BASES\SCRIPTS\BACKUP.SQL’

Ahora utilizaremos el planificador de Windows para poder ejecutar dicho script, para ello emplearemos el muy poco usado SQLCMD, este es un ejecutable que abre un intérprete de SQL bastante simple a nivel de línea de comandos.

REM sqlcmd -S NOMBRE\INSTANCIA -E  -i C:\bases\scripts\backup.sql

REM Instancio el motor de base de datos con SQLCMD, y utilizo el script generado anteriormente ni bien se genera la conexion
sqlcmd -S LOCALHOST\SQLEXPRESS -E  -i C:\bases\scripts\backup.sql

REM En caso de que el servidor no este en dominio y no pueda utilizar un usuario de red, puedo generar una unidad de red y guardar el respaldo en una carpeta de red
xcopy "c:\bases\*.bak" "z:\backup"

REM Puedo borrar los archivos de respaldos una vez realizada la copia a una unidad de red.
del "c:\bases\*.bak"

Creamos un BAT con el contenido anterior y lo instanciamos desde una consola de comandos, el mismo debería de conectarse al servidor de base de datos y generar los respaldos utilizando el QUERY anteriormente generado, si esto mismo lo incorporamos en el planificador de Windows, el resultado será tener cada día los respaldos en dicho carpeta, diferenciados por la fecha de creación.


Espero que les sea de mucha utilidad, hasta la próxima.

Adjunto ambos script para Descargar

No hay comentarios:

Publicar un comentario