Я просматриваю каталог проектов БД SSIS, чтобы найти дату и время начала и окончания для каждого пакета SSIS, вызываемого из основного пакета. Есть ли запрос на это?
После просмотра [internal].[executions] и SSISDB.catalog.operation_messages и т. д.
Выполнение этого запроса не работает, если есть главный пакет, вызывающий дочерние пакеты.
select start_time,end_time,*
from catalog.executions cc order by cc.start_time desc
Я пытаюсь найти время начала и окончания для каждого детского пакета.
CATALOG.EXECUTABLE_STATISTICS
DMV регистрирует статистику выполнения компонентов внутри пакета, включая выполнение задач пакета. В столбцах START_TIME
и END_TIME
хранится время начала и завершения выполнения компонента. Столбец EXECUTION_DURATION
содержит время выполнения исполняемого файла, в данном случае дочерних пакетов, в миллисекундах. Конечно, это можно преобразовать в секунды, минуты и т. д. в зависимости от того, что вам нужно. Хотя у этого есть столбец для пути выполнения компонента в родительском пакете, у него нет столбца для прямого имени компонента, поэтому CATALOG.EXECUTABLES
включен для EXECUTABLE_NAME
, и это DMV можно опустить, если вы хотите только вместо этого просмотрите путь выполнения (столбец EXECUTION_PATH
). CATALOG.EXECUTIONS
имеет столбцы для папки и имени проекта, и вы можете присоединиться к ним, чтобы применить фильтры для конкретного проекта и папки, в которой находится пакет. Вы также можете применить фильтр к столбцу EXECUTION_ID
, чтобы просматривать только детали для определенного выполнения . Выполнение пакета на базовом уровне ведения журнала с возможностью ведения журнала сведений о выполнении для компонентов.
SELECT
EX.FOLDER_NAME,
EX.PROJECT_NAME,
E.EXECUTABLE_NAME,
EX.PACKAGE_NAME,
ES.START_TIME AS ComponentStartTime,
ES.END_TIME AS ComponentEndTime,
EX.start_time AS PackageStartTime,
EX.end_time AS PackageEndTime,
ES.EXECUTION_DURATION AS ComponentExecutionTimeInMilliseconds
FROM SSISDB.CATALOG.EXECUTIONS EX
INNER JOIN SSISDB.CATALOG.EXECUTABLES E on EX.EXECUTION_ID = E.EXECUTION_ID
INNER JOIN SSISDB.CATALOG.EXECUTABLE_STATISTICS ES on E.EXECUTABLE_ID = ES.EXECUTABLE_ID AND EX.EXECUTION_ID = ES.EXECUTION_ID
--PACKAGE_NAME- parent package
WHERE E.PACKAGE_NAME = 'Package Name.dtsx' AND EX.PROJECT_NAME = 'Project Name'
AND EX.FOLDER_NAME = 'Folder Name'
возможно, с минимальным и максимальным значением, кажется, работает лучше, ВЫБЕРИТЕ ex.execution_id, E.PACKAGE_NAME, min (Es.start_time) AS PackageStartTime, max (Es.end_time) AS PackageEndTime FROM SSISDB.CATALOG.EXECUTIONS EX INNER JOIN SSISDB. CATALOG.EXECUTABLES E на EX.EXECUTION_ID = E.EXECUTION_ID INNER JOIN SSISDB.CATALOG.EXECUTABLE_STATISTICS ES на E.EXECUTABLE_ID = ES.EXECUTABLE_ID --PACKAGE_NAME- родительский пакет WHERE E.PACKAGE_NAME = '' группа ex.execution_id, e.package_name порядок по ex.execution_id, e.package_name
Без каких-либо фильтров для конкретных экземпляров выполнения (EXECUTION_ID) запрос будет возвращать строки для всех исполнений. Под MAX(EXECUTION_ID) для самого последнего я имел в виду использовать это как фильтр в предложении WHERE, например zappysys.com/blog/…
вам нужно добавить это при последнем соединении И EX.EXECUTION_ID = ES.EXECUTION_ID
@JoeSmith, это правильно, я, должно быть, пропустил это, когда публиковал это. Моя ошибка, но хороший улов. Я добавил эту часть в свой ответ, однако, пожалуйста, не отмечайте ее как принятую, поскольку изначально она была пропущена, и вы упомянули об этом.
спасибо, не стесняйтесь пересматривать ответ, в моем ответе есть min() и max(), и по какой-то причине я не думаю, что это эффективно или так, как задумано Microsoft
Какие дубликаты вы получаете? Я запустил это перед публикацией, и проблем не было. Являются ли дубликаты, которые вы видите, строками для всех казней? Вы можете использовать столбец EXECUTION_ID для проверки конкретного экземпляра выполнения или самого последнего экземпляра с MAX (EXECUTION_ID).