В моем мастер-пакете в обработчике событий 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'