Какова наилучшая практика для FTP из хранимой процедуры SQL Server 2005?
Каков наилучший способ выполнения команд FTP из хранимой процедуры SQL Server? мы в настоящее время используем что-то вроде этого:
EXEC master..xp_cmdshell 'ftp -n -s:d:\ftp\ftpscript.xmt 172.1.1.1'
Проблема в том, что команда кажется успешной, даже если FTP завершился с ошибкой. Кроме того, использование xp_cmdshell
требует специальных разрешений и может оставлять место для проблем с безопасностью.
Ответы
Ответ 1
Если вы используете SQL 2005, вы можете сделать это в сборке интеграции CLR и использовать классы FTP в пространстве имен System.Net для создания простого FTP-клиента.
Вам будет полезно улавливать и обрабатывать исключения и уменьшать риск безопасности при использовании xp_cmdshell.
Только некоторые мысли.
Ответ 2
Другая возможность - использовать службы DTS или Integration Services (DTS для SQL Server 7 или 2000, SSIS для 2005 или выше). Оба из Microsoft, включенные в установку сервера Sql (по крайней мере, в стандартной версии), и имеют задачу FTP и предназначены для импорта/экспорта заданий с Sql Server.
Ответ 3
Если вам нужно делать FTP из базы данных, я бы пошел с сборкой .NET, как предложил Кевин. Это обеспечит наибольший контроль над процессом, плюс вы сможете записывать значимые сообщения об ошибках в таблицу для отчетов.
Другой вариант - написать приложение командной строки, которое будет считывать базу данных для запуска команд. Затем вы можете определить запланированную задачу для вызова этого приложения в командной строке каждые минуты или независимо от периода опроса. Это будет более безопасно, чем включение поддержки CLR на сервере базы данных.
Ответ 4
Kev опубликовал пример здесь, который реализует свое предложение "сделать это в сборке интеграции CLR и использовать классы FTP в пространстве имен System.Net для создания простой FTP-клиент".