SSIS: задача FTP - одновременные подключения
Я создал пакет SSIS для загрузки файла с FTP-сервера.
Когда я отлаживаю пакет, все идет хорошо. Но когда я планирую пакет как шаг Job, он иногда не может подключиться.
Задание повторяется каждые 4 часа, а в среднем каждый другой прогон выходит из строя с ошибкой: 0xC002918F - запрос на вход был отклонен.
Соединение анонимно и не требует пароля
Я тестировал его в течение нескольких часов и узнал некоторую информацию:
- При тестировании в FileZilla я обнаружил, что сервер отказывает во втором подключении, пытаясь загрузить файл. Установка максимального количества одновременных подключений к 1 заставила его работать в FileZilla
- Команда FTP в командной строке работает нормально. Возможно, потому, что он закрывает соединение после каждой успешной команды
- В диспетчере FTP-соединений я не нашел возможности ограничить количество подключений
У меня нет возможности увидеть настройки FTP-сервера.
Что меня больше смущает, так это то, что некоторые заданные задачи работают нормально, а некоторые терпят неудачу. Я не нашел в нем никакой регулярности.
Что я пробовал до сих пор:
- Активный/пассивный режим
- Ограничение повторных попыток в диспетчере FTP-соединений до 1
- Сдвиг времени расписания, поэтому он не сталкивается с другими (более старыми) задачами, загружаемыми с сервера.
- Настройка задачи FTP в режиме ASCII (сервер говорит FileZilla, что он принимает только символы ASCII)
Пока не повезло. Все еще некоторые успехи, а некоторые нет.
EDIT:
FTP-сервер находится на устройстве Simatic.
На этой неделе я продолжал расписание каждые 1 час и продолжал пинговать устройство каждые 30 секунд. Тем не менее некоторые попытки SSID не преуспевают, и ping проходит каждый раз: -/
Ответы
Ответ 1
Я бы заменил стандартную задачу FTP SSIS на выполнение задачи процесса и вызовет WinSCP.
https://winscp.net/eng/docs/guide_automation
Я нашел WinSCP намного надежнее и гибко. Вы можете передать ему командную строку, построенную с использованием выражений, чтобы охватить все функции FTP-задачи SSIS и т.д.
Ответ 2
Я думаю, что вы должны принять только использование обходного пути в этом сценарии, возможно, установите шаг задания SSIS агента SQL для повторной попытки после задержки X секунд (расширенная вкладка шага задания SQL). Мы делаем это много, когда подключаемся к flaky cloud API с помощью SSIS.
Или, может быть, контейнер цикла в вашем пакете, который продолжает сбой и выходит из строя - возможно, попробуйте 3 раза подключиться?
Извините, если это уже очевидно для вас.
Ответ 3
По моему опыту, иногда FILE LOCK
и DB CONNECTION
не заканчиваются даже после завершения выполнения пакета.
Я предлагаю вам использовать Script Task
и выполнять загрузку с использованием кода С# и убедиться, что вы закрываете FTP-соединение в конце.
Ответ 4
Ранее ошибка называлась:
'0xC002918F', - 1073573489, 'DTS_E_FTPTASK_UNABLETOCONNECTTOSERVER', 'Невозможно подключиться к FTP-серверу с помощью "__".'
Задача FTP явно закрывает соединение в конце действия, поэтому, если соединение остается открытым, оно должно быть чем-то с вашим сервером.
Оба CozyRock и PragmaticWorks имеют фантастические задачи FTP для SSIS.
Руководство, перечисленное на веб-сайте Microsoft
https://support.microsoft.com/en-us/kb/925880
https://technet.microsoft.com/en-us/library/bb794745.aspx
Помимо брандмауэра/разрешений/ограничений Проверьте учетные данные FTP или, точнее, как они сохраняются/извлекаются. В этом случае эмпирическое правило состоит в том, чтобы полагаться на SQL Server, то есть на использование уровня безопасности пакетов "Опираться на сервер хранения и роли для контроля доступа".. Этот подход должен полностью удалить все проблемы с учетными данными FTP (исключая туманно, конечно).
Однако. Это значение по умолчанию, применяемое при использовании Model Deployment Model для хранения пакетов в каталоге SSISDB, где пакет, который вы отметили.
Не используйте XP_CMDSHELL и вызывайте внешние программы без необходимости в бизнесе, как советует вышеупомянутый плакат. Включение CMDSHELL является существенным риском для безопасности.
Ответ 5
Выстрел в темноте, не могли бы вы попытаться обновить пакет и установить DelayValidation = True?
![DelayValidation: True]()
Процедуры проверки устанавливают соединения для их проверки. Возможно, процедура проверки является другой параллельной связью? Стоит сделать снимок?