Backups automáticos en SQL Server

Para realizar backups o respaldos automáticos de todas nuestras bases de datos encontre este script en el blog de Victor Hugo Saavedra el código del script es el siguiente:


DECLARE @name VARCHAR(50) -- variable del nombre de BD
DECLARE @path VARCHAR(256) -- ruta donde se guardara el archivo backup
DECLARE @fileName VARCHAR(256) -- nombre del archivo del backup
DECLARE @fileDate VARCHAR(20) -- fecha de creación del backup


SET @path = 'f:\Backup\'

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

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


Este script lo podemos utilizar en un JOB para que se realice periódicamente, ejecuta esta consulta y automáticamente se creará el job o trabajo:


EXEC msdb..sp_add_job @job_name = 'respaldogeneral', ---nombre del trabajo o job
  @enabled = 1,
  @description = 'No description available.',
  @start_step_id = 1,
  @category_name = 'Database Maintenance',
  @notify_level_eventlog = 0,
  @notify_level_email = 0,
  @notify_level_netsend = 0,
  @notify_level_page = 0,
  @notify_email_operator_name = NULL,
  @notify_netsend_operator_name = NULL,
  @notify_page_operator_name = NULL,
  @delete_level = 0
GO

EXEC msdb..sp_add_jobstep @job_name = 'respaldogeneral', ---nombre del trabajo o job
  @step_id = 1,
  @step_name = 'paso1',
  @subsystem = 'TSQL',
  @command = 'DECLARE @name VARCHAR(50) --
variable del nombre de BD
DECLARE @path VARCHAR(256) -- ruta donde se guardara el archivo backup
DECLARE @fileName VARCHAR(256) -- nombre del archivo del backup
DECLARE @fileDate VARCHAR(20) --  fecha de creación del backup

SET @path = ''f:\Backup\''

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

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',
  @additional_parameters = NULL,
  @cmdexec_success_code = 0,
  @on_success_action = 1,
  @on_success_step_id = 0,
  @on_fail_action = 2,
  @on_fail_step_id = 0,
  @server = NULL,
  @database_name = [master],
  @database_user_name = NULL,
  @retry_attempts = 0,
  @retry_interval = 0,
  @output_file_name = NULL,
  @flags = 0
GO
--- aca es el periodo yo lo hago diario a las 19:00
EXEC msdb..sp_add_jobschedule @job_name = 'respaldogeneral',
  @name = 'diario',
  @enabled = 1,
  @freq_type = 4,
  @freq_interval = 1,
  @freq_subday_type = 1,
  @freq_subday_interval = 0,
  @freq_relative_interval = 0,
  @freq_recurrence_factor = 0,
  @active_start_date = 20120420,
  @active_end_date = 99991231,
  @active_start_time = 190000,
  @active_end_time = 0
GO


--- aca cada sabado a las 14:00 ya que el fin de semana despues de las dos el servidor se apaga
EXEC msdb..sp_add_jobschedule @job_name = 'respaldogeneral',
  @name = 'sabado',
  @enabled = 1,
  @freq_type = 8,
  @freq_interval = 64,
  @freq_subday_type = 1,
  @freq_subday_interval = 0,
  @freq_relative_interval = 0,
  @freq_recurrence_factor = 1,
  @active_start_date = 20120420,
  @active_end_date = 99991231,
  @active_start_time = 120000,
  @active_end_time = 0
GO

EXEC msdb..sp_add_jobserver @job_name = 'respaldogeneral',
  @server_name = 'servidor' --acá le cambias el nombre de tu servidor
GO

Comentarios

Entradas populares