Задание агента SQL Server 2005 выполняется, но не выводится

По сути, у меня есть задание, которое выполняется в BIDS и как отдельный пакет, и пока оно выполняется под агентом SQL Server, оно не завершается должным образом (хотя сообщений об ошибках нет).

Этапы работы:

1) Удалить все строки из таблицы;

2) Используйте для каждого цикла, чтобы заполнить таблицу из электронных таблиц Excel;

3) Уборка стола.

Я пробовал эту страницу MS (шаги 1 и 2), не вижу необходимости чтобы начать изменение безопасности на стороне сервера.

Также SQLServerCentral.com для этой страницы, без разрешения.

Как я могу получить регистрацию ошибок или исправление?

Обратите внимание, что я опубликовал это из Server Fault, так как это один из тех вопросов, которые не относятся к чистому администрированию или программированию.

Я вошел в систему как прокси-аккаунт, под которым я выполняю это, и задание выполняется автономно, но жалуется, что таблицы Excel пусты?


person alimack    schedule 21.04.2010    source источник


Ответы (3)


Вот как мне удалось отследить «возвращенное состояние» из пакета SSIS, вызванного через задание агента SQL. Если нам повезет, кое-что из этого может относиться и к вашей системе.

  • Задание вызывает хранимую процедуру
  • Процедура создает вызов DTEXEC (с дюжиной или более параметрами)
  • Процедура вызывает xp_cmdshell с вызовом в качестве параметра (@Command)
  • Пакет служб SSIS работает
  • «локальная» переменная SSIS инициализирована до 1
  • Если возникает ошибка, «поток» служб SSIS переходит к шагу, который устанавливает для этой локальной переменной значение 0.
  • На последнем этапе используйте выражения, чтобы установить для свойства SSIS «ForceExecutionResult» эту локальную переменную (1 = успех, 0 = сбой).
  • Полная форма вызова SSIS сохраняет возвращаемое значение следующим образом:

    ВЫПОЛНИТЬ @ReturnValue = master.dbo.xp_cmdshell @Command

...и тогда все становится запутанным, так как вы можете получить множество значений, возвращаемых из SSIS. Я регистрировал действия и действия в таблице БД, выполняя шаги SSIS, и консультировался с ними, чтобы попытаться разобраться (отсюда и берется @Description ниже). Вот соответствующий код и комментарии:

--  Evaluate the DTEXEC return code
SET @Message = case
                 when @ReturnValue = 1 and @Description <> 'SSIS Package' then 'SSIS Package execution was stopped or interrupted before it completed'
                 when @ReturnValue in (0,1)   then ''  --  Package success or failure is logged within the package
                 when @ReturnValue = 3        then 'DTEXEC exit code 3, package interrupted'
                 when @ReturnValue in (4,5,6) then 'DTEXEC exit code ' + cast(@Returnvalue as varchar(10)) + ', package could not be run'
                 else 'DTEXEC exit code ' + isnull(cast(@Returnvalue as varchar(10)), '<NULL>') + ' is an unknown and unanticipated value'
               end
--  Oddball case: if cmd.exe process is killed, return value is 1, but process will continue anyway
--  and could finish 100% succesfully... and @ReturnValue will equal 1.  If you can figure out how,
--  write a check for this in here.

Последнее относится к ситуации «что, если во время работы SSIS какой-то администратор-шутник убьет сеанс CMD (скажем, из диспетчера задач), потому что процесс выполняется слишком долго». У нас никогда такого не случалось - насколько я знаю - но они были суперпараноиками, когда я писал это, поэтому мне пришлось разобраться в этом...

person Philip Kelley    schedule 21.04.2010
comment
Спасибо за очень подробное объяснение, я вполне могу вернуться к этому коду в будущем. - person alimack; 26.04.2010

Почему бы не использовать ведение журнала, встроенное в SSIS? Мы отправляем наши журналы в таблицу базы данных, а затем анализируем их в другой таблице в более удобном для пользователя формате и можем видеть каждый шаг каждого запущенного пакета. И каждую ошибку.

person HLGEM    schedule 21.04.2010
comment
Вы должны настроить ведение журнала в пакете. Ты сделал это? И это все еще не регистрировалось? - person HLGEM; 26.04.2010

В конце концов я это исправил, спасибо за предложения.

По сути, я вошел в Windows с учетной записью прокси-пользователя, с которой работал, и начал видеть такие ошибки, как: «Для каждого файла перечислитель пуст»

Я скопировал файлы проекта и начал тестировать, оказалось, что я все еще оставил путь к файлу (N:/) в свойствах окна цикла For Each, хотя я изменил свойства соединения. Легче, когда у вас есть условия ошибки для работы. Мне также пришлось воссоздать сопоставление переменных.

Неудивительно, что люди просто воссоздают весь пакет.

Теперь исправлено и работает!

person alimack    schedule 26.04.2010