【问题标题】:SSIS schedule and restart package executionSSIS 计划并重新启动包执行
【发布时间】:2019-01-18 14:45:34
【问题描述】:

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

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

当 SQL Server 代理重新启动时,作业也会重新启动,并且我的 SSIS 目录中的活动操作显示单个正在运行的任务,这很好。 但是Windows Server本身重启的时候,Active Operations显示两个正在运行的Task,而且都是一样的->https://imgur.com/a/l8pJbbl

无论我重新启动 Windows Server 还是 SQL Server 代理,我都希望只有一个活动操作。我怎样才能做到这一点?

【问题讨论】:

    标签: ssis sql-server-2016


    【解决方案1】:

    在作业步骤中,使用 T-SQL 从 SSIS 目录执行包并添加条件以检查包是否已处于活动状态。在下面的示例中,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
    

    【讨论】:

    • 好吧,我忘了说我是一个“新手”并且(几乎)对 SSIS 和 T-SQL 一无所知。我要试试看再回来看看。
    • 所以现在作业(仍计划在 SQL 代理启动时运行)配置了您的 T-SQL 脚本,但我添加了“IF NOT EXISTS”而不是“IF EXISTS”,这样如果 package.dtsx 尚未运行,则会执行它。这是正确的吗?
    • 是的,这是正确的,只是一个错字。我相应地更新了答案。
    • 我认为它有效。在系统重新启动或 SQL 代理重新启动后,SSIS 活动操作会列出单个执行。我之前没有注意到的一件事是,即使在重新启动/重新启动之后,Execution 也会保持相同的 ID 和 start_time。我不确定这是否是预期的行为,但我的主要问题已解决:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多