首页 > 解决方案 > 何时将错误写入 SSISDB?

问题描述

在我的On Error事件处理程序的主包中,一个子包Logging被触发。这个包触发他/她自己的子包:SendMailSendmail对 SSISDB 执行查询。此查询收集具有最新 execution_id 的所有错误。结果被写入一个平面文件。然后将平面文件附加到电子邮件并发送给我。

但是,如果我在 SSDT 中运行它,效果会很好。在服务器上运行此文件时,该文件为空。该查询正在寻找导致最新执行的错误。但是,如果我更改查询以查找较旧的执行,则一切运行正常。在我尝试收集错误时,错误似乎尚未写入数据库。但是,简单地让查询等待 5 秒并不意味着我会得到结果。

我能否以某种方式确保在我需要错误时已将错误写入 SSISDB?

这是我用来从 SSISDB 中提取错误的查询。当我更改 (SELECT MAX(execution_id) FROM SSISDB.catalog.executions)为先前的 execution_id 错误时,一切正常。(但我看到了上一次运行的错误)

SELECT distinct
            cast(message_time as datetime2) as message_time
            ,cast(REPLACE(REPLACE(REPLACE(REPLACE(messaGE, CHAR(13) + CHAR(10), ' ... '), 
             CHAR(10) + CHAR(13), ' ... '), CHAR(13), ' '), CHAR(10), ' ... ') as nvarchar(400)) AS MESSAGE
            ,cast(execution_path as nvarchar(400)) as execution_path
    FROM   (
           SELECT  em.*
           FROM    catalog.event_messages em
           WHERE   em.operation_id = (SELECT MAX(execution_id) FROM SSISDB.catalog.executions)
               AND event_name NOT LIKE '%Validate%'
           )q
    WHERE   event_name = 'OnError'

标签: ssissql-server-data-toolssql-server-2017

解决方案


推荐阅读