Как проверить результаты задания пакета служб SSIS после завершения его выполнения?
У меня есть пакет служб SSIS, который импортирует данные в базу данных SQL Server 2008. Я настроил задание расписания в Агенте SQL Server для запуска этого пакета. Когда я проверяю историю, я могу только видеть, успешно ли выполнялось задание или нет. Я не видел других сообщений, кроме этого.
Я хотел бы знать, сколько записей импортируется при выполнении задания. Как я могу это контролировать? Должен ли я использовать дополнительные компоненты в пакете SSIS или установить некоторые конфигурации в настройке задания агента SQL Server?
Я нашел некоторые средства ведения журнала в настройке задания агента SQL Server, но я не уверен, что он может выполнить мои требования или нет.
5 ответов
Если вы просто заинтересованы в знании обрабатываемых столбцов и не заинтересованы в информации для дальнейшего использования, одним из возможных вариантов является использование функции ведения журнала SSIS. Вот как это работает для задач потока данных.
- нажмите на пакет служб SSIS.
- в меню выберите SSIS --> ведение журнала...
- на Configure журналы служб SSIS: диалоговое окно выберите тип поставщика и нажмите кнопку Добавить. Я выбрал SQL Server для этот пример. Установите флажок имя и укажите источник данных в столбце конфигурация. Здесь SQLServer-это имя диспетчера соединений. SSIS создаст таблицу с именем dbo.sysssislog и хранимых процедур dbo.sp_ssis_addlogentry в выбранной вами базе данных. См. скриншот #1 ниже.
- Если вам нужны обработанные строки, установите флажок OnInformation. Здесь, в Примере, пакет успешно выполнен таким образом записи в журнале были найдены в разделе OnInformation. Возможно, Вам потребуется настроить этот выбор событий в соответствии с вашими требованиями. См. скриншот #2 ниже.
- вот пример выполнения пакета в задаче потока данных. См. скриншот #3 ниже.
- вот пример вывода таблицы журналов dbo.sysssislog. Я только отобразил столбцы id и . В таблице много других столбцов. В запрос, я фильтрую вывод только для пакета с именем'Package1 и событие 'события oninformation'. Можно заметить, что записи с идентификаторами 7, 14 и 15 содержат обработанные строки. См. скриншот #4 ниже.
надеюсь, это поможет.
скриншот #1:
Скриншот #2:
скриншот #3:
скриншот #4:
вот еще один подход, когда журнал заданий SQL Server не показывает выходные данные из пакетов служб SSIS: используйте командные строки DTEXEC.
(Upside: этот подход помещает вывод задания, где кто-либо еще поддерживает его ожидал чтобы найти его: в истории работы.
Недостаток для больших пакетов: если у вас есть длинный пакет служб SSIS с большим количеством задач или компонентов и большим количеством выходных данных, история заданий разделит выходные данные пакета на множество строк истории заданий, делая подход в предыдущем ответе-вход в таблицу-легче читать.)
показать выход пакета служб SSIS в истории Иова:
(1) измените шаги задания с типа "пакет служб SQL Server Integration Services" на "операционная система (CmdExec)",
(2) Используйте командные строки DTEXEC для выполнения пакетов.
пример командной строки:
DTExec /DTS "\MSDB\myPkgName" /DECRYPT pkgPass /MAXCONCURRENT " -1 " /CHECKPOINTING OFF
обратите внимание, что если пакет служб SSIS требует 32-бит выполнение (true для экспорта в Excel, например), затем используйте утилиту DTEXEC в " Program Files (x86)", полностью квалифицировав ее. Пример, где приложение SQL Server было установлено на диске "E:" и где используется SQL Server 2014:
"E:\Program Files (x86)\Microsoft SQL Server0\DTS\Binn\DTExec.exe" /DTS "\MSDB\myPkgName" /DECRYPT pkgPass /MAXCONCURRENT " -1 " /CHECKPOINTING OFF
Если ваши пакеты служб SSIS находятся в файловой системе (как ".dtsx " files), затем замените "/DTS" на "/FILE".
Если ваши пакеты служб SSIS были помещены в SSISDB (используя "модель развертывания проекта", которая доступна начиная с SQL Server 2012, вместо старой "модели развертывания пакетов"), затем замените" /DTS "на"/ISSERVER".
Далее перейдите на страницу "дополнительно" шага задания и убедитесь, что флажок установлен для "включить вывод шага в историю".
наконец, рассмотрим вашу работу этапа "запуск": если ваша работа шаги "запуск" уже были расставлены к прокси-серверу, на шаги задания типа "SQL сервер интеграции услуг Пакет", тогда вы уже сделали, что прокси-активной подсистемы "среда SQL Server службы Integration пакет услуг." Теперь, чтобы сделать командные строки, как указано выше, проверьте свойства прокси-сервера и убедитесь, что он также активен для подсистемы "операционная система (CmdExec)".
MSDN ссылка:вывод служб SSIS в истории агента Sql
Если пакет развернут в каталоге служб Integration Services базы данных (а не загружен из файловой системы), можно легко получить подробные отчеты.
откройте узел каталога в среде SQL Server Management Studio, щелкните правой кнопкой мыши имя пакета, выберите Отчеты / Стандартные отчеты | все выполнения и просмотрите сведения о каждом шаге задания и его подкомпонентах, включая импортированные записи.
используйте приведенную ниже процедуру для получения ошибок служб SSIS с идентификатором выполнения
CREATE PROCEDURE [dbo].[get_ssis_status] @EXECUTION_ID INT\n
AS
BEGIN
SELECT o.operation_id EXECUTION_ID
,convert(datetimeoffset,OM.message_time,109) TIME
,D.message_source_desc ERROR_SOURCE
,OM.message ERROR_MESSAGE
,CASE ex.STATUS
WHEN 4 THEN 'Package Failed'
WHEN 7 THEN CASE EM.message_type
WHEN 120 THEN 'package failed'
WHEN 130 THEN 'package failed' ELSE 'Package Succeed'END
END AS STATUS
FROM SSISDB.CATALOG.operation_messages AS OM
INNER JOIN SSISDB.CATALOG.operations AS O ON O.operation_id = OM.operation_id
INNER JOIN SSISDB.CATALOG.executions AS EX ON o.operation_id = ex.execution_id
INNER JOIN (VALUES (- 1,'Unknown'),(120,'Error'),(110,'Warning'),(130,'TaskFailed')) EM(message_type, message_desc) ON EM.message_type = OM.message_type
INNER JOIN (VALUES
(10,'Entry APIs, such as T-SQL and CLR Stored procedures')
,(20,'External process used to run package (ISServerExec.exe)')
,(30,'Package-level objects')
,(40,'Control Flow tasks')
,(50,'Control Flow containers')
,(60,'Data Flow task')
) D(message_source_type, message_source_desc) ON D.message_source_type = OM.message_source_type
WHERE ex.execution_id = @EXECUTION_ID
AND OM.message_type IN (120,130,-1);
END
Если вы вставляете строки с помощью задачи "выполнение SQL", вы можете получить количество записей с помощью переменной @@ROWCOUNT. Тогда вы должны написать его где-нибудь, чтобы прочитать его позже для отчета.