Я просто после некоторых советов\мыслей.
У меня есть пакет SSIS (SQL Server 2016), который выполняет следующие действия:
Он проходит через папку в сетевой папке (я даже предоставил группе «Все» полный доступ к этой папке и присваиваю пути к файлам в папке переменной (@FilePaths)
Затем эта переменная используется в качестве вложения в задаче «Отправить электронную почту».
Когда я выполняю интерактивно в Visual Studio\SSDT, он работает нормально - я получаю электронное письмо с вложениями
Если я звоню через задание агента SQL, я получаю электронное письмо, но без вложения
В качестве теста я также вставил @FilePaths в качестве тела электронного письма - снова при выполнении через SSDT я получаю путь к файлам в электронном письме, а когда через задание агента тело пусто.
Я использую задачу сценария в цикле для получения имен файлов
Таким образом, при выполнении через задание агента SQL он не может «видеть» файлы для получения путей, даже несмотря на то, что я установил группу «Все» для папки, а также учетную запись, под которой запускается агент.
У кого-нибудь есть идеи, что мне здесь не хватает? Это должно быть какое-то разрешение.
Спасибо.
Я использую '\\servername\folder\folder' в качестве пути. В журналах говорится, что он выполнился нормально, что, я полагаю, и сделал, он просто не записал пути в переменную @FilePaths
То есть вы видите все файлы в логах? Это не соответствует вашему описанию; если вы видите, что @FilePaths
присваивается значение в журналах, то электронное письмо будет содержать это значение (если вы используете его значение). если это так, это означает, что с вашим пакетом что-то не так (или, возможно, вы развернули старую версию или не развернули ее повторно). Кроме того, как насчет вопроса, который я задал об учетной записи службы агента?
Я установил подробные журналы и повторно запускаю. Агент работает как учетная запись AD, и я могу подтвердить, что эта учетная запись также имеет полный контроль над общим ресурсом.
Просто имейте в виду, что есть два уровня разрешений: общий доступ (который часто устанавливается для всех, чтобы избежать проблем), но есть также фактические разрешения для самой папки. В любом случае, в этом случае обычно выдается ошибка. Можете ли вы уточнить, находятся ли ваши тесты SSDT на SQL Server или нет? Возможно, это проблема с почтовым сервером, который не пропускает вложения. Попробуйте жестко закодировать путь и посмотреть, работает ли это. Попробуйте жестко указать локальный путь (локальный для SQL Server)
спасибо за совет @Nick.McDermaid, я попробую это....
Подозреваю, как только вы посмотрите на логи, вы увидите что-то вроде Foreach Loop Container:Warning: The For Each File enumerator is empty. The For Each File enumerator did not find any files that matched the file pattern, or the specified directory was empty.
даже несмотря на то, что я ввел подробный журнал, он все равно не говорит мне, какое (или если) оно присвоило значение @FilePaths. Я использую задачу сценария в цикле для получения имен файлов.
Почему бы не использовать контейнер For Each Loop?
@Nick.McDermaid Если я жестко кодирую файл из общей папки и запускаю пакет с простой задачей отправки электронной почты через задание агента, это работает!
@Larnu, да, плохо, я использую задачу сценария в контейнере для каждого цикла, извините, если я не выразился яснее.
Так почему же это не работает при использовании переменной, но работает при жестком кодировании?
Я думаю, что, возможно, я решил это. Я изменил TargetServerVersion с SQL Server 2017 на SQL Server 2016 и повторно развернул его в каталоге. Если я вызываю пакет электронной почты из задания агента, он работает и прикрепляет электронное письмо. Я не буду на 100% счастлив, пока не завершится ночная работа, частью которой это является. Но он ищет работу на поверхности. Спасибо за вашу помощь.
@Michael, я бы посоветовал вам опубликовать свой комментарий к решению в качестве ответа и принять его. Это было бы полезно для будущих пользователей, которые сталкиваются с этим вопросом.
@digital.aaron подойдет — завтра я посмотрю, будет ли он работать на 100%, так как это часть большого ночного пакета SSIS.
Просто чтобы закончить это - ночная работа была успешной - поэтому исправление состояло в том, чтобы изменить «TargetServerVersion» с 2017 на 2016 и повторно развернуть в каталоге SSIS.
легенда, разве я не куча какашек
Похоже, агент не может получить доступ к общему ресурсу. I предполагать вы используете полный путь UNC и что агент SQL Server работает как учетная запись AD? SSISDB имеет множество журналов при выполнении пакета; что говорят те?