在SSIS 2012中捕获SPECIFIC任务的运行时状态

时间:2019-04-19 15:04:46

标签: ssis ssis-2012

我有一个SSIS包,其中包含5个序列任务容器,并且在该其他控制流任务内部。全部都在并行运行。

我正在尝试获取所有审核和元数据信息,例如程序包名称,任务名称和任务的当前状态(运行,已完成或失败)。

我觉得这里更大的问题是一旦任务状态更改后如何处理。

我要保存在sql表中的信息

我可以从系统变量中获取程序包名称,以及如何获取Task的当前状态。

我正在尝试存储状态值,例如“开始”,“进行中”,“结束”。

可能有人请分享您的想法。

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用SSIS的事件处理程序捕获任务状态的变化。为此,请单击任务本身,然后单击设计时窗口顶部的Event Handlers选项卡。这将在页面中间弹出一个带有蓝色链接的空白窗口,如下所示:

Control-Flow level Task Event Handles

在点击蓝色链接之前,选择要处理的特定事件处理程序:

enter image description here

您可以从此处执行特定任务。例如,您可以在OnError事件处理程序中运行SMTP邮件任务,以发送有关任务错误的电子邮件警报。或者,您可以在OnPostExecute事件处理程序中运行执行SQL任务,以在任务完成后将数据发送到数据库。

我认为,对于您的特定问题(如何获取任务的运行时间),您将需要两个事件处理程序:

  1. OnPreExecute :通过GETDATE()捕获系统的日期时间值,并将其作为SequenceContainerTaskNameStartTs写入SQL表中
  2. OnPostExecute :通过GETDATE()捕获系统的日期时间值,并将其作为SequenceContainerTaskNameEndTs写入SQL表中

“ Ts”代表时间戳记。

然后可以使用DATEDIFF()函数计算运行时间并指定时间间隔(例如,秒,分钟,小时等)。此值可以存储在表的单独字段中(即SequenceContainerRunTime),也可以在SQL SELECT中即时生成。

有关SSIS事件处理程序的更多信息,请阅读:

Integration Services (SSIS) Event Handlers