Автоматическое резервное копирование (планировщик SQL)
Назначение задания сервера SQL по резервному копированию.
Вначале создается скрипт (команда) для SQL сервера по созданию резервных копий. Затем создается новая задача в меню "Сервис - Задачи сервера".
В поле "Наименование" вводится любое понятное название для создаваемой задачи, в поле база данных выбирается база данных, в контексте которой должна выполняться задача (для задачи резервного копирования указать базу master). В поле "Выполняемая команда" вписывается команда на языке Transact-SQL, либо выбирается по кнопке [...] одна из готовых (для готовых после выбора необходимо поправить пути и/или имена объектов).
Далее в разделе "Планировщик" указать (по кнопке "Создать") периодичность и время выполнения данной команды.
Приводим как пример команду (выделена синим) создания резервной копии, результатом которой является архив в формате rar. Для применения ее в автоматическом режиме скопировать от строки "-- НАЧАЛО КОМАНДЫ РЕЗЕРВНОГО КОПИРОВАНИЯ" и до строки "-- КОНЕЦ КОМАНДЫ РЕЗЕРВНОГО КОПИРОВАНИЯ" и вставить в поле "Выполняемая команда" задач сервера, указать свои значения имени базы данных и путей (раздел ИНИЦИАЛИЗИРОВАТЬ ВРУЧНУЮ) , задать в разделе планировщика периодичность запуска.
-- НАЧАЛО КОМАНДЫ РЕЗЕРВНОГО КОПИРОВАНИЯ
-- создание резервной копии базы данных , к имени архива базы добавляется время создания копии _ГГГГ-ММ-ДД_ЧЧ-ММ-СС.
-- результат архивируется с удалением исходного файла (если указать архиватор)
-- полученный архив копируется в заданную папку (если указать эту папку)
-- перед применением правильно задать значения переменных @cSQLBase и @cPath....
declare @pdt varchar(30), @cstr varchar(8000), @cSQLBase varchar(50), @cPathBackup varchar(200), @cPathWinRar varchar(200), @cPathResult varchar(200)
------- Инициализировать вручную следующие переменные -------
set @cSQLBase = 'budjet_2007' -- имя базы данных , которую надо периодически архивировать
set @cPathBackup = 'e:\Backup\' -- путь к папке с резервными копиями относительно SQL сервера (в конце обязат. слеш \ )
set @cPathWinRar = 'e:\backup\WinRAR.exe' -- путь и имя RAR архиватора на сервере (если пусто '' - не архивируется)
set @cPathResult = '' -- папка, куда скопировать архив резервной копии (пусто '' - оставить в папке с резервными копиями @cPathBackup)
--------Резервное копирование--------------
set @pdt=rtrim(CONVERT ( varchar(30) , GETDATE ( ) ,120 ))
set @pdt = '_'+ REPLACE ( @pdt , ':' , '-' )
set @pdt = REPLACE ( @pdt , ' ' , '_' )
set @cstr = 'BACKUP DATABASE '+@cSQLBase+' TO DISK = N'''+@cPathBackup+@cSQLBase+@pdt+'.BAK'' WITH INIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT'
if @cPathWinRar<>''
set @cstr = @cstr + ' exec master..xp_cmdshell '''+@cPathWinRar+' a -rr5p -df -dh -ibck -inul -ep '+@cPathBackup+@cSQLBase+@pdt+' '+@cPathBackup+@cSQLBase+@pdt+'.bak'''
if @cPathResult<>''
set @cstr = @cstr +' exec master..xp_cmdshell ''copy '+@cPathBackup+@cSQLBase+@pdt+'.rar '+@cPathResult+@cSQLBase+@pdt+'.rar'''
execute(@cstr)
-- КОНЕЦ КОМАНДЫ РЕЗЕРВНОГО КОПИРОВАНИЯ