首页 > 解决方案 > 如何在 SSISDB 中检测 SSIS 包组件类型?

问题描述

我有一个 SQL,它有助于分析每个 SSIS 包组件的持续时间,它使用

事实是,我无法从这些实体中的数据中理解它event_messages.message_source_name代表什么。我在包中只有它的名称和路径。我需要了解每种组件类型:

例如,我有一个包含 4 个组件的 SSIS 包(名称 =“Test”):

  1. 执行 Sql 任务(名称 =“开始”)
  2. 数据流任务(名称=“加载”)
  3. 脚本任务(名称 = “检查”)
  4. 执行 Sql 任务 (name = "Finish")

并查询 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

可能吗?

标签: sql-serverssissql-server-2017

解决方案


事实是,我无法从这些实体中的数据中理解 event_messages.message_source_name 代表什么。

它描述了在属性中定义的对象名称,Name它生成了这个消息记录。与message_source_id它一起允许识别消息的来源。即在您的情况下,它可以是包的名称或任务或容器或数据流的名称。
根据事件日志信息,只能区分以下对象:

  • 包裹
  • 任务
  • 容器
  • 数据流任务

好消息 - 此表以标准日志记录级别填充。

没有简单的方法可以从 SSISDB 获取组件类型。要获取组件类型,您需要分析包源代码。问题是它被加密存储在internal.packages. 您可以使用 SSISDB 存储过程导出包含您感兴趣的包的整个项目catalog.get_project,然后将其解压缩并读取引用包的 XML 源。通过使用message_source_idGUID,您可以识别 XML 中的任务并读取其类型。


推荐阅读