SSIS计划并重新启动程序包执行

时间:2019-01-18 14:45:34

标签: ssis sql-server-2016

我希望在SQL Server重新启动时避免重复的SSIS操作。

我已经设置了一个步骤(运行一个本身具有无限循环的SSIS程序包)。该作业计划在“ Sql Server代理启动时”运行。

重新启动SQL Server代理后,作业也会重新启动,并且SSIS目录中的“活动操作”显示单个正在运行的任务,这很好。 但是,当Windows Server本身重新启动时,活动操作将显示两个正在运行的任务,并且它们都是相同的-> https://imgur.com/a/l8pJbbl

无论我重新启动Windows Server还是SQL Server代理,我都希望只有一个活动操作。我该如何实现?

1 个答案:

答案 0 :(得分:1)

在作业步骤中,使用T-SQL从SSIS目录执行该程序包,并添加条件以检查该程序包是否已处于活动状态。在下面的示例中,以给定名称(状态为2)向catalog.executions DMV查询软件包,它表示当前正在运行的软件包。如果发现该程序包已经处于活动状态,则什么也不做,否则从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