Задание агента SQL Server 2005 выполняется, но не выводится
По сути, у меня есть задание, которое выполняется в BIDS и является автономным пакетом, и, хотя оно выполняется под агентом SQL Server, оно не завершается должным образом (хотя сообщений об ошибках нет).
Шаги работы:
1) Удалить все строки из таблицы;
2) Используйте Для каждого цикла, чтобы заполнить таблицу из таблиц Excel;
3) Очистить стол.
Я пробовал эту страницу MS (шаги 1 и 2), не видел необходимости начинать изменение со стороны безопасности на сервере.
Также SQLServerCentral.com для этой страницы, без разрешения.
Как я могу получить журнал ошибок или исправить?
Заметьте, я сделал это из-за сбоя сервера, так как это один из тех вопросов, который касается не только администратора или программирования.
Я вошел в систему как учетная запись прокси, под которой я нахожусь, и задание выполняется самостоятельно, но жалуется, что таблицы Excel пусты?
3 ответа
Я исправил это в конце концов, спасибо за предложения.
В основном я вошел в Windows с учетной записью прокси-пользователя, с которой я работал, и начал видеть ошибки вроде: "Для каждого файлового перечислителя пусто"
Я скопировал файлы проекта и начал тестирование. Оказалось, что я все еще оставил путь к файлу (N:/) в свойствах поля For Each loop, хотя я изменил свойства соединения. Проще, когда у вас есть условия ошибок для работы. Я также должен был воссоздать отображение переменных.
Не удивительно, что люди просто воссоздают весь пакет.
Сейчас исправлено и работает!
Вот как мне удалось отследить "возвращенное состояние" из пакета служб SSIS, вызываемого через задание агента SQL. Если нам повезет, это может относиться к вашей системе.
- Работа вызывает хранимую процедуру
- Процедура создает вызов DTEXEC (с дюжиной или более параметров)
- Процедура вызывает xp_cmdshell, с вызовом в качестве параметра (@Command)
- Пакет служб SSIS работает
- "локальная" переменная SSIS инициализируется 1
- Если возникает ошибка, "поток" служб SSIS переходит к шагу, который устанавливает для этой локальной переменной значение 0
- На последнем шаге используйте выражения для установки свойства SSIS "ForceExecutionResult" для этой локальной переменной (1 = успех, 0 = отказ)
Полная форма вызова служб SSIS сохраняет возвращаемое значение следующим образом:
EXECUTE @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 (скажем, из TaskManager), потому что процесс выполняется слишком долго". У нас никогда этого не было - я знаю об этом - но они были супер-параноидальными, когда я писал это, так что мне пришлось посмотреть на это...
Почему бы не использовать протоколирование, встроенное в SSIS? Мы отправляем наши журналы в таблицу базы данных, а затем анализируем их в другой таблице в более удобном для пользователя формате и видим каждый шаг каждого пакета, который был запущен. И каждая ошибка.