Расписание служб SSIS и перезапуск выполнения пакета - PullRequest
0 голосов
/ 18 января 2019

Я хочу избежать дублирования операций SSIS при перезапуске SQL Server.

Я установил задание за один шаг (для запуска пакета служб SSIS, который имеет бесконечный цикл). Это задание запланировано на выполнение "при запуске агента сервера Sql".

Когда агент SQL Server перезапускается, задание также перезапускается, и активные операции в моем каталоге служб SSIS показывают одну запущенную задачу, что хорошо. Но когда сам Windows Server перезапускается, активные операции показывают две запущенные задачи, и они обе одинаковы -> https://imgur.com/a/l8pJbbl

Я ожидаю только одну активную операцию, перезапускаю ли я Windows Server или агент SQL Server. Как мне этого добиться?

1 Ответ

0 голосов
/ 18 января 2019

На шаге задания выполните пакет из каталога служб SSIS с помощью T-SQL и добавьте условие, чтобы проверить, активен ли уже пакет. В приведенном ниже примере catalog.executions DMV запрашивается для пакета с заданным именем со статусом 2, который представляет текущий запущенный пакет. Если этот пакет уже найден активным, то ничего не делается, в противном случае он выполняется из хранимой процедуры catalog.start_execution.

IF NOT EXISTS(SELECT EXECUTION_ID FROM SSISDB.CATALOG.EXECUTIONS WHERE PACKAGE_NAME = 'YourPackage.dtsx' 
AND PROJECT_NAME = 'ProjectOfPackage' AND FOLDER_NAME = 'Folder Containing Package' AND [STATUS] = 2)
BEGIN 

DECLARE @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'YourPackage.dtsx', @execution_id=@execution_id OUTPUT, 
@folder_name=N'Folder Containing Package', @project_name=N'ProjectOfPackage'

DECLARE @var0 smallint = 2
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=50, 
@parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0

EXEC [SSISDB].[catalog].[start_execution] @execution_id

END
...