SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误

Posted

技术标签:

【中文标题】SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误【英文标题】:SSIS onTaskfailed/OnErrorfailed Events, not able to capture recent errors 【发布时间】:2021-08-27 03:15:41 【问题描述】:

SSIS 事件处理程序 onerrorfail 或 ontaskfailed 都未能捕获最近的错误消息。 情况 - 1.父包调用子包。 2.Parent 没有错误,但子包有错误,我正在尝试捕获这些错误。

Select TOP 1 
  A.package_name
  ,A.[Message]
FROM SSISDB.[catalog].[Event_messages] A
Where A.execution_path like  '%Template%'   
AND A.Event_name = 'OnError'
Order by A.Message_time desc

带有 OnError(事件处理程序)的 SQL 之上 - 检索以前的错误记录。 以上 SQL 与 onTaskfailed(event handler) - 检索以前的错误记录和最近的错误记录,因此电子邮件被触发两次。 为了停止多封电子邮件,我输入了 Counter 变量。 计数器变量解决了电子邮件问题,但它给出了以前的错误记录而不是最近的错误。准确地说,有一个错误,我不知道为什么它会给出过去的错误。尽管我必须处理多封电子邮件,但我也使用了日期过滤器,除了上面的 SQL 之外什么都没有。

上面的 SQL 有什么问题(基本和直截了当),为什么获取最近的记录会出现这样的问题?更好的处理方式?

【问题讨论】:

请有任何建议 如果错误没有被记录在首位,您的 SQL 将不会检索任何记录的错误消息... 记录了错误并且它确实检索了唯一的问题是,因为错误处理事件多次触发,所以它获取过去的错误消息以及最近的错误消息。我尝试了几种不同的 sql 消息来获取最近的错误,但没有任何效果。 能否提供 Event_messages 表中的数据样本? 提供您的样本输入和预期输出 【参考方案1】:

我认为更好的方法是使用“事件处理程序”选项卡中的“OnError”事件处理程序来获取子程序包中的确切数据流或控制流(无论您的子程序包中有什么)。因为包失败是子包,你想捕获它的错误。因此,您可以在 OnError 中添加一个“执行 SQL 任务”,并使用“System::ErrorCode”和“System::ErrorDescription”(它们是系统变量)插入您喜欢的一个日志表中。你的插入命令应该是这样的“插入[table_name]([CodeColumn],[DscColumn])值(?,?);”你可以使用这些系统变量来捕捉你的错误。我也建议您使用一个日期时间列来更好地理解错误。我希望它对你有用。

【讨论】:

以上是关于SSIS onTaskfailed/OnErrorfailed 事件,无法捕获最近的错误的主要内容,如果未能解决你的问题,请参考以下文章

ssis 中的 nzsql 命令

SSIS Union All - SSIS 中是不是存在针对此项目的错误?

通过 Windows 任务计划程序调用 SSIS 包时,发送邮件任务在 SSIS 中不起作用

要恢复的 SSIS 包

SSIS和NULL值

ETL和ssis ssas ssrs是个啥关系?