суббота, 4 января 2014 г.

Настраиваем автоматическую архивацию базы MSSQL


Предположим, наша база называется Test
В SQL-агенте создаем новое задание.
В этом новом задании первый шаг следующий:
DECLARE @DAYSTR VARCHAR(3) = CAST(DAY(GETDATE()) AS VARCHAR(2))
DECLARE @COMMANDBACKUP nVARCHAR(1000) = 'BACKUP DATABASE [Test] TO DISK = N''F:\backup\Test'+@DAYSTR+'.BAK'''
SET @COMMANDBACKUP = @COMMANDBACKUP+ ' WITH NOFORMAT, NOINIT, '
SET @COMMANDBACKUP = @COMMANDBACKUP+ ' NAME = N''Test-Полная База данных Резервное копирование'','
SET @COMMANDBACKUP = @COMMANDBACKUP+' SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10'
EXECUTE(@COMMANDBACKUP)
Создаем второй шаг – удаление старого архива. Второй шаг будет выполнен лишь в том случае, если успешно выполнен первый шаг. Кроме того, внутри процедуры второго шага прописаны проверки на существование нового архива. Если нового архива нет, удаления не будет.
-- Включение разрешения изменения расширенных опций.
EXEC sp_configure 'show advanced options', 1
-- Обновление текущих настроек расширенных опций.
RECONFIGURE
-- Включение возможности запуска внешних программ.
EXEC sp_configure 'xp_cmdshell', 1
-- Обновление текущих настроек для запуска внешних программ.
RECONFIGURE
--DECLARE @DAYSTR VARCHAR(3) = '1'
DECLARE @DAYSTR VARCHAR(3) = CAST(DAY(GETDATE()) AS VARCHAR(2))
IF @DAYSTR = '1'
begin
EXEC master..xp_cmdshell 'IF EXIST F:\backup\Test30.bak (del F:\backup\Test30.bak)'
EXEC master..xp_cmdshell 'IF EXIST F:\backup\Test31.bak (del F:\backup\Test31.bak)'
end
ELSE
begin
DECLARE @PREVDAY VARCHAR(2) = CAST( CAST(@DAYSTR AS INT) -1 as VARCHAR(2) )
DECLARE @STRCMD NVARCHAR(100) = 'IF EXIST F:\backup\Test' + @PREVDAY + '.bak (del F:\backup\Test' + @PREVDAY + '.bak)'
EXEC xp_cmdshell @STRCMD
END
Теперь можно создать расписание выполнения задания. Например, после окончания каждого рабочего дня запускается данное задание. Если удалять старые копии не нужно или нужно с иной периодичностью, то второй шаг можно вынести в отдельное задание.

Комментариев нет:

Отправить комментарий