Когда ошибки записываются в SSISDB? - PullRequest
0 голосов
/ 04 января 2019

В моем мастер-пакете в обработчике событий On запускается дочерний пакет Ведение журнала .Этот пакет запускает свой собственный дочерний пакет: SendMail . Sendmail выполняет запрос к SSISDB.Этот запрос собирает все ошибки с последним идентификатором execute_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'
...