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