Как определить тип компонента пакета служб SSIS в SSISDB? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть SQL, который помогает анализировать продолжительность каждого компонента пакета SSIS, он использует

  • SSISDB.catalog.executions
  • SSISDB.CATALOG.operations
  • SSISDB.CATALOG.event_messages

Дело в том, что из данных в этих сущностях я не могу понять, что означает event_messages.message_source_name. У меня есть только его имя и путь в пакете. Мне нужно понять каждый тип компонента:

  • SQL Задача сценария
  • Поток данных
  • Контейнер последовательности
  • L oop Контейнер
  • и т. Д.

Например, у меня есть пакет служб SSIS (name = "Test") с 4 компонентами:

  1. Выполнение Sql Задача (name = "Start")
  2. Задача потока данных (name = "Load")
  3. Задача сценария (name = "Check")
  4. Выполнение Sql Задача ( name = "Fini sh")

И запрос SSISDB Я хочу получить что-то вроде этого

Package_name |Component_name | Component_type
Test         | Start         | Execute Sql Task
Test         | Load          | Data Flow Task 
Test         | Check         | Script Task
Test         | Finish        | Execute Sql Task

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Дело в том, что из данных в этих сущностях я не могу понять, что означает event_messages.message_source_name.

Описывает имя объекта, определенное в свойстве Name, которое сгенерировало эту запись сообщения. Вместе с message_source_id позволяет идентифицировать источник сообщения. Т.е. в вашем случае это может быть имя пакета или имя задачи, контейнера или потока данных.
На основании информации журнала событий вы можете различать guish только между следующими объектами:

  • Пакет
  • Задача
  • Контейнер
  • Задача потока данных

Хорошие новости - эта таблица заполнена на стандартном уровне ведения журнала .

Нет простого способа получить тип компонента из SSISDB. Чтобы получить тип компонента, вам нужно проанализировать исходный код пакета. Проблема в том, что он хранится в зашифрованном виде в internal.packages. Вы можете экспортировать весь проект, содержащий интересующий вас пакет, с помощью хранимой процедуры catalog.get_project SSISDB, а затем разархивировать его и прочитать XML исходный код указанного пакета. Используя message_source_id GUID, вы можете определить задачу в XML и прочитать ее тип.

1 голос
/ 12 февраля 2020

Я думаю, что вы после представления ниже:

catalog.execution_component_phases

use SSISDB  
select package_name, task_name, subcomponent_name, execution_path,  
    SUM(DATEDIFF(ms,start_time,end_time)) as active_time,  
    DATEDIFF(ms,min(start_time), max(end_time)) as total_time  
from catalog.execution_component_phases  
where execution_id = 1841  
group by package_name, task_name, subcomponent_name, execution_path  
order by package_name, task_name, subcomponent_name, execution_path 

Если представление пусто, установите уровень ведения журнала выполнения пакета: установлен на Performance или Verbose.

Дополнительная информация:

https://docs.microsoft.com/en-us/sql/integration-services/system-views/catalog-execution-component-phases?view=sql-server-ver15

...