【问题标题】:Capture Run Time status of SPECIFIC Task in SSIS 2012在 SSIS 2012 中捕获特定任务的运行时状态
【发布时间】:2019-04-19 15:04:45
【问题描述】:

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

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

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

我正在尝试将这些信息保存在 sql 表中

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

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

请有人分享你的想法。

谢谢

【问题讨论】:

    标签: ssis ssis-2012


    【解决方案1】:

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

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

    从这里,您可以执行特定任务。例如,您可以在 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

    【讨论】:

    • 非常感谢,但在这里我有 1 个疑问,我不想捕获系统的日期时间。我正在尝试捕获特定任务的状态。请提出建议。
    • @Tulsa 您最初的问题是获取任务的开始、进度和结束。这些都应该与 PreExecute、OnProgress 和 PostExecute 相关联。这与您将获得的 SSIS 提供的功能差不多。更多可能需要自定义组件。我不知道你在寻找什么具体的状态。
    • @J Weezy:谢谢。我能够用你的解决方案实现逻辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多