jueves, 22 de marzo de 2012

Backup

En cierta ocasión tuve que desarrollar un sistema sencillo para hacer copias de seguridad de todas las bases de datos no-de sistema para cierta instancia.

Éste es el script que desarrollé, de nombre backup.sql:

DECLARE @name VARCHAR(50) -- database name 
DECLARE @path VARCHAR(256) -- path for backup files 
DECLARE @fileName VARCHAR(256) -- filename for backup 
DECLARE @fileDate VARCHAR(20) -- used for file name

SET @path = 'C:\COPIAS_SEGURIDAD\' 
SELECT @fileDate = convert(varchar, getdate(), 102)+'_'+ replace(convert(varchar, getdate(),14),':','.')
DECLARE db_cursor CURSOR FOR 
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') 

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  

WHILE @@FETCH_STATUS = 0  
BEGIN  
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK' 
       BACKUP DATABASE @name TO DISK = @fileName 

       FETCH NEXT FROM db_cursor INTO @name  
END  

CLOSE db_cursor  
DEALLOCATE db_cursor


Para que pudiera funcionar tanto para instalaciones express como superiores, tenía que ser independiente del SQL Agent, por lo que escribí el siguiente fichero BACKUP.bat

sqlcmd -E -i "backup.sql" -S nombrerequipo\nombreinstancia

el cual sería ejecutado periódicamente por el sistema de Tareas Automatizadas del equipo.

No hay comentarios: