SQL – Script para copia de seguridad

SQL Express no dispone de planes de mantenimiento, pero es relativamente sencillo configurar un script que realice las copias de seguridad automáticamente.

Los pasos para la automatización sin los siguientes:

1.- Generar el archivo con el script:  P:\Backup.sql

El contenido del script está al final del artículo, y tan solo hay que modificar el nombre de la base de datos y la ruta.

2.- Generar el archivo:  P:\CopiaSql.bat con el siguiente contenido:

sqlcmd -S AJ9-01-001-0001\SQLExpress -U sa -P miPassword -i "P:\Backup.sql"

Si además, queremos borrar las copias que tengan más de 7 días por ejemplo, añadiremos una segunda línea:

forfiles /P P:\A3\Copia\ /M *.* /D -7 -c "cmd /c del @path"

Es interesante además, añadir un XCOPY o ROBOCOPY que extraiga los archivos de copia del servidor:

xcopy P:\A3\Copia\*.bak N:\Backup\ /Y /S

3.- Generar una tarea programada que ejecute P:\CopiaSql.bat aunque no esté iniciada la sesión en el servidor

Eso es todo!!!

Contenido del archivo Backup.sql:

-----------------------
-- BACKUP A3_STR
------------------------
 DECLARE @strDBName nvarchar(50)
 DECLARE @strFolder nvarchar(500)
 DECLARE @tToday datetime
 DECLARE @strBackupName nvarchar(100)
 DECLARE @strBackupFile nvarchar(600)
 
-- Nombre de la Base de Datos
 SET @strDBName = N'A3_STR'
 
-- Directorio Destino de la copia de seguridad
 SET @strFolder = N'P:\A3\Copia'
 
-- Componer nombre del archivo de copia de seguridad
 SET @tToday = GETDATE()
 SET @strBackupName = @strDBName + N' '
  +STR(DATEPART(year, @tToday), 4, 0)
  +REPLACE(STR(DATEPART(month, @tToday), 2, 0), N' ',N'0')
  +REPLACE(STR(DATEPART(day, @tToday), 2, 0), N' ', N'0')
  +REPLACE(STR(DATEPART(hour, @tToday), 2, 0), N' ', N'0')
  +REPLACE(STR(DATEPART(minute, @tToday), 2, 0), N' ', N'0')
 SET @strBackupFile = @strFolder + N'\' + @strBackupName + N'.bak'
 BACKUP DATABASE @strDBName TO DISK = @strBackupFile WITH NOFORMAT, INIT, SKIP, NAME = @strBackupName