gifts2017

Резервное копирование на FTP средствами SQL Server

Опубликовал Виталий Барилко (Diversus) в раздел Администрирование - Архивирование (backup)

Тема резервного копирования баз данных SQL актуальна будет всегда, поэтому привожу свой пример решения этой задачи. Скрпит SQL-сервера для создания бэкапов на FTP, при ошибке отправляется письмо администратору. Все операции выполняются штатными средствами SQL-сервера и Windows.

Описание

Тема резервного копирования баз данных SQL актуальна будет всегда, поэтому привожу свой пример решения этой задачи.

Основная проблема SQL Server при создании бэкапов это то, что штатными средствами заставить его делать эти бэкапы на FTP трудно (по крайней мере я не нашел как это сделать).  При желании можно заставить делать копии в сетевую папку, но не на FTP. В результате был создан этот скрипт...

Скрипт осуществляет резервное копирование всех баз данных текущего SQL сервера на FTP.
Все настраиваемые параметры вынесены в комментарий "НАСТРОЙКИ".
Если используется SQL ниже 2008 то уберите "COMPRESSION" в конструкции BACKUP (эта конструкция позволяет в 2008 SQL сервере сжимать бэкап).
Backup получает имя, состоящее из имени базы данных и текущей даты и помещается на FTP
сервер в папку @FtpFolder\@ServerName\DataBaseName\Base
Base вида 2010_07_19___22_30_DataBaseName.bak
Вы можете ограничить перечень баз данных для резервного копирования, отредактировав конструкцию
"WHERE" в определении курсора.
Если резервная копия по каким то причинам не сделается, то на мыло отправляется письмо.
Только предварительно нужно настроить SQL Server для отправки писем... Сам скрипт был найден на просторах интернета (сейчас уже и не знаю кто автор), но в нем не было работы с FTP и отправки на почту.

Установка

 Для того чтобы скрипт заработал снала необходимов включить "xp_cmdshell" (если по-простому - выполнение команды Windows из скрипта SQL Server из командной строки)

Для этого выполните следующие конструкции:

-- << CUT START

USE master;
GO
EXEC sp_configure 'show advanced option', '1';
RECONFIGURE

EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE

EXEC sp_configure 'SQL Mail XPs', 1
RECONFIGURE
-- >> CUT END 

Далее создать в MaintancePlan план в котором вставить задачу "Execute T-SQL Statement Task" в него вставляем текст, который во вложении, настраиваем расписание работы плана. Все.

Можно запускать и смотреть что получается.

Скачать файлы

Наименование Файл Версия Размер
BackupFTP.sql 187
.sql 9,18Kb
20.07.10
187
.sql 9,18Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Лунев (luns) 01.10.10 12:36
хорошая статья.
правда COMPRESSION не работает в standart версии, поэтому в ней тоже надо убрать этот параметр (вместе с запятой)
2. Виталий Онянов (Tavalik) 29.08.13 08:53
Скрипт однозначно хороший, за это плюс. Я написал подобный скрипт, но столкнулся с одной проблемой, как узнать что файл действительно закачался на FTP? У вас проверка:

-- отправка на ftp через командную строку
SET @Command = 'ftp -i -n -s:"' + @DirPath + 'Script.txt" ' + @FtpServer + ':' + @FtpPort + '>> "' + @DirPath + 'Log.txt"'
EXEC @result = master..xp_cmdshell @Command


Как я понял (по крайней мере у меня так), результат будет положительным если команда ftp успешно выполнена, а не если файл закачался полностью. Вы проверяли, в ситуации когда закачка началась, но была прервана, что возвращается в результат?
3. Виталий Онянов (Tavalik) 29.08.13 09:14
Да, у вас такая же ошибка, даже более. Сейчас проверил. Попробуйте такой код:

DECLARE
@Command SYSNAME,
@result int

SET @Command = 'ftp.exe -v -n -s:' + '"D:\FTP\transport.txt"'
EXEC @result = master..xp_cmdshell @Command

select @result as result
...Показать Скрыть


Файл transport.txt сделайте заведомо неверный, например, укажите неправильный пароль к FTP. Команда все равно будет выполнена и результат будет 0. А файл на FTP так и не попал.

Пока не знаю как добавить проверку правильности загрузки. :(
4. Виталий Онянов (Tavalik) 29.08.13 09:28
Если интересно, вот http://tavalik.ru/index.php/sohranenie-rezervnyx-kopij-baz-dannyx-sql-na-ftp-server/ публикация моего решения, но оно натыкается на те же грабли.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа