什么时候将错误写入SSISDB?

时间:2019-01-04 14:00:21

标签: ssis sql-server-data-tools sql-server-2017

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

但是,如果我在SSDT中运行此程序,则效果很好。在服务器上运行此文件时,该文件为空。该查询正在寻找导致最新执行的错误。但是,如果我更改查询以使其查找较旧的执行,则一切运行正常。 在我尝试收集错误时,似乎还没有将错误写入数据库。但是,仅使查询等待5秒钟并不意味着我得到了结果。

我能以某种方式确保将错误在我需要的那一刻写入SSISDB吗?

这是我用来从SSISDB中提取错误的查询。当我将(SELECT MAX(execution_id) FROM SSISDB.catalog.executions)更改为上一个execute_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'

0 个答案:

没有答案