SSIS计划并重新启动包执行

SSIS计划并重新启动包执行,ssis,sql-server-2016,Ssis,Sql Server 2016,我希望在SQL Server重新启动时避免重复SSIS操作 我用一个步骤设置了一个作业(运行本身具有无限循环的SSIS包)。此作业计划在“Sql Server代理启动时”运行 当SQL Server代理重新启动时,作业也会重新启动,并且“我的SSIS目录”中的活动操作会显示一个正在运行的任务,这很好。 但是当Windows服务器本身重新启动时,活动操作显示两个正在运行的任务,它们都是相同的-> 无论是重新启动Windows Server还是SQL Server代理,我都希望只执行一次活动操作。如

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

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

当SQL Server代理重新启动时,作业也会重新启动,并且“我的SSIS目录”中的活动操作会显示一个正在运行的任务,这很好。 但是当Windows服务器本身重新启动时,活动操作显示两个正在运行的任务,它们都是相同的->


无论是重新启动Windows Server还是SQL Server代理,我都希望只执行一次活动操作。如何实现这一点?

在作业步骤中,使用T-SQL从SSIS目录执行包,并添加一个条件以检查包是否已处于活动状态。在下面的示例中,
catalog.executions
DMV根据给定名称查询包,状态为2,表示当前正在运行的包。如果发现此包已处于活动状态,则不会执行任何操作,否则将从
目录.start\u 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

好吧,我忘了说我是“新手”,对SSIS和T-SQL一无所知。我将尝试一下,然后再检查。因此,现在使用T-SQL脚本配置了作业(仍计划在SQL代理启动时运行),但我添加了一个“IF NOT EXISTS”而不是“IF EXISTS”,以便在package.dtsx尚未运行时执行它。这是对的吗?是的,这是对的,只是一个打字错误。我相应地更新了答案。我认为它有效。系统重新启动或SQL Agent重新启动后,SSIS活动操作将列出一次执行。我以前没有注意到的一点是,即使在重新启动/重新启动之后,执行仍然保持相同的ID和启动时间。我不确定这是否是预期的行为,但我的主要问题已经解决:)