捕获 运行 SSIS 2012 中特定任务的时间状态

Capture Run Time status of SPECIFIC Task in SSIS 2012

我有一个 SSIS 包,其中包含 5 个序列任务容器和另一个控制流任务。都是运行平行的。

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

我觉得这里更大的问题是一旦任务状态发生变化如何处理。

我正在尝试将此信息保存在 sql table

我可以从系统变量中获取的包名称,如何获取任务的当前状态。

我正在尝试存储状态值,如 "start"、"in-progress"、"end"。

有人可以分享你的想法。

谢谢

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

在您点击蓝色 link 之前,select 您要处理的特定事件处理程序:

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

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

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

其中 'Ts' 代表时间戳。

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

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

Integration Services (SSIS) Event Handlers