Лучший метод для SFTP или FTPS файлов через SSIS [закрыт]
этот вопрос первоначально задан, который является лучшим методом для загрузки файлов через SFTP или FTPS в SSIS. Теперь в нем просто перечислены плюсы и минусы каждого решения. Я лично использую библиотеку SFTP CozyRoc в эти дни, но я использовал каждое из приведенных ниже решений в тот или иной момент.
БИБЛИОТЕКА КОМПОНЕНТОВ СЛУЖБ SSIS
метод: установите библиотеку компонентов служб SSIS из CozyRoc, страницы CodePlex, BizCrypto, PragmaticWorks или какой-либо другой поставщик на каждом сервере разработки и производства и использовать задачу SFTP для загрузки файлов.
Pros: простота в использовании. Это выглядит, пахнет и чувствует себя как нормальная задача SSIS. SSIS также распознает пароль как конфиденциальную информацию и позволяет вам использовать все обычные опции для защиты конфиденциальной информации вместо того, чтобы просто хранить ее в незащищенном виде. Хорошо работает с другими задачами SSIS, такими как цикл ForEach Стеклотара. Ошибки при загрузке и загрузке не удается. Работает хорошо, когда вы не знаете имена файлов на удаленном FTP-сайте для загрузки или когда вы не будете знать имя файла для загрузки до времени выполнения.
минусы: за исключением решения Codeplex, это стоит денег, чтобы лицензировать в производственной среде. Требуется установка библиотек на каждой машине разработки и производства. Если это решение Codeplex, то вы используете программное обеспечение, которое не поддерживается любым конкретным поставщиком. Это также делает вас зависимым от поставщика для обновления своих библиотек между каждой версией. Например, до 2008 RTM'D Я разрабатывал новый сервер на CTP-версии 2008 года, и библиотека CozyRoc 2005 была несовместима с ней. В конце концов они выпустили совместимую версию 2008, но мне пришлось временно использовать решение командной строки для решения этой проблемы.
ПРОГРАММА SFTP КОМАНДНОЙ СТРОКИ
метод: установите бесплатно приложение SFTP командной строки, такое как Putty и WinSCP, и выполните его, запустив пакетный файл или задачу процесса операционной системы. Инструкции для этого через WinSCP перечислены здесь.
плюсы: бесплатно, бесплатно и бесплатно. Вы можете быть уверены, что это безопасно, если вы используете шпатлевку, так как многочисленные клиенты FTP GUI, похоже, используют шпатлевку под крышками. Вы определенно знаете, что используете SSH2, а не SSH.
минусы: две утилиты командной строки, которые я пробовал (Putty и Cygwin) требуется хранить пароль SFTP в небезопасном месте. Я не нашел хорошего способа фиксировать сбои или ошибки при загрузке файлов. Процесс не выглядит и не пахнет как SSIS. Большая часть кода инкапсулируется в текстовые файлы вместо самого SSIS. Трудно использовать, если вы не знаете точное имя файла, который вы загружаете или скачиваете.
третья сторона C# или VB.NET библиотека
метод: установите библиотеку SFTP или FTPS и используйте задачу сценария это ссылается на библиотеку для загрузки файлов. (Я никогда не пробовал это, поэтому я собираюсь угадать плюсы и минусы)
Pros: вероятно, легко фиксировать ошибки. Должно хорошо работать с переменными, поэтому его, вероятно, будет легко использовать, даже если вы не знаете точное имя файла, который вы загружаете или загружаете.
минусы: это задача скрипта в сочетании с библиотеками .NET. Если вы используете SSIS, то вам, вероятно, более комфортно с задачами SSIS, чем .NET-код. Задачи сценариев также трудно устранить, так как они не имеют те же инструменты отладки и функции, как обычные проекты .NET. Создает зависимость от стороннего кода, который может не работать между различными версиями SQL Server. Справедливости ради, вероятно, более вероятно, что он будет работать между различными версиями SQL Server, чем сторонняя библиотека задач SSIS. Еще одна огромная афера - я не нашел бесплатный C# или VB.NET библиотека, которая делает это до сих пор. Так что если кто-то знает об этом, пожалуйста, позвольте мне знать!
4 ответов
следующий вопрос может быть:
что было бы рекомендуемым выбором компонента SSIS для выполнения задачи SFTP или FTPS?
Cozyroc:
должно быть легко проверить доступность протокола ssh, установив сервер на "разрешить только SSHv2" и тестирование. Вы пробовали спросить отдел продаж Cozy?
Командная строка sftp:
неизвестная проблема с именем файла может быть решена просто сценарии/использование подстановочных знаков (по крайней мере под Cygwin).
3rd party lib:
зачем вам нужен сторонний lib для FTPS? .NET поддерживает этот протокол с 2.0 или около того.
http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl.aspx
следующее скрипт может быть вариантом вместо сохранения учетных данных доступа в текстовый файл с WINSCP.
Я просто хотел предоставить обновление о том, что мы на самом деле решили сделать, чтобы решить проблемы SFTP в SSIS. Вот разбивка того, что произошло:
сначала я пытался использовать Putty и некоторые пакетные файлы для загрузки файлов, но было трудно захватить ошибки. Кроме того, я хранил наши учетные данные SFTP в текстовых файлах, так как это было частью сценариев загрузки шпатлевки.
мы приобрели лицензию CozyRoc для нашего сервера SSIS для пара сотен долларов в год, и я полностью удовлетворен результатами использования их продукта. С продуктом CozyRoc задача потока управления вызывает ошибки, если есть какие-либо проблемы с загрузкой. Поскольку в моей команде также есть несколько младших программистов служб SSIS, им было легче понять, как настроить задачу потока управления, чем использовать метод Putty scripts. И, наконец, пароль шифруется с помощью собственного шифрования служб SSIS для защиты конфиденциальных данных. У меня больше нет любые пароли, хранящиеся в открытом тексте на моем сервере.
Я просмотрел некоторые из других сторонних библиотек, которые были рекомендованы в этом вопросе, но, похоже, CozyRoc был самым дешевым из поставщиков, и у них также было несколько других задач SSIS, которые я смог использовать в своей команде BI. Спасибо, CozyRoc!
без компонента можно использовать задачу "скрипт". См.этой ссылке
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Imports Ftp
Imports System.IO
Public Class ScriptMain
Public Sub Main()
Try
Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
cm.Properties("ServerName").SetValue(cm, Dts.Variables("SFTPServerName").Value.ToString)
cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("SFTPLogin").Value.ToString)
cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("SFTPPassword").Value.ToString)
cm.Properties("ServerPort").SetValue(cm, Dts.Variables("SFTPPortNumber").Value.ToString)
cm.Properties("Timeout").SetValue(cm, "0")
cm.Properties("ChunkSize").SetValue(cm, "0") '1000 kb
cm.Properties("Retries").SetValue(cm, "0")
Dts.Variables("Continue").Value = 0
Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))
Dim FilesList() As String
Dim FolderName() As String
Dim Separator As String = ";"
' \ServerName\Share1;\ServerName\Share2 : Local copy
Dim FolderLocalListSrc As String = Dts.Variables("FolderLocalListSrc").Value.ToString
Dim FolderLocalListDst() As String = Split(FolderLocalListSrc, Separator)
Dim Counter As Integer
ftp.Connect()
ftp.GetListing(FolderName, FilesList)
If FilesList IsNot Nothing Then
Dim FileName As String
For Each FileName In FilesList
Dim FileToProcess(0) As String
Dim FileToMove(0) As String
For Counter = 0 To FolderLocalListDst.GetUpperBound(0)
FileToProcess(0) = FileName
FileToMove(0) = FolderLocalListDst(Counter) + FileName
If (File.Exists(FileToMove(0)) = False) Then
' Téléchargement en local
ftp.ReceiveFiles(FileToProcess, FolderLocalListDst(Counter), True, True)
End If
Next
' Upload du fichier dans les archives du FTP
ftp.SendFiles(FileToMove, "/Archives", True, False)
' Suppression du fichier à la racine du FTP
ftp.DeleteFiles(FileToProcess)
Next
End If
ftp.Close()
Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
Dts.TaskResult = Dts.Results.Failure
End Try
End Sub
End Class