【问题标题】:Running multiple instances of an SSIS package via SQLAgent concurrently通过 SQLAgent 同时运行 SSIS 包的多个实例
【发布时间】:2014-03-05 16:31:41
【问题描述】:

我有一个 SSIS 包计划在 SQLAgent 中每 X 分钟运行一次,如果满足某些条件,它随后会执行过多的子包。我遇到的问题是,有时某些子包的运行时间比 X 分钟长得多,这反过来意味着在所有子包完成之前无法运行其他任何东西。

这也意味着,在该运行期间,运行子包的条件可能会来来去去,这意味着即使原始包完成,它们也不会运行。

有没有办法允许父包的并发实例运行,即使它以前正在运行?

ParentA 计划每 10 分钟运行一次,在 10:00 开始运行,并且满足 ChildA 的条件。 ChildB 需要在上午 10:20 运行,它没有满足所以它不运行。 ChildA 需要 3 小时才能完成。

我需要在 10:10 启动一个新的 ParentA 实例,然后在 10:20 再次启动。

如何在不安排 2+ ParentA 并且必须进行一些花哨的编码以防止子包的多个实例启动的情况下执行此操作?

谢谢

【问题讨论】:

    标签: ssis sql-agent-job sql-agent


    【解决方案1】:

    我会更改 ParentA 包,使其启动一次并且不会终止,但有一系列启动子包的循环。

    在 PackageA 中,我将添加一个 For 循环容器,在其中添加一个执行 SQL 任务,该任务使用 SQL WAITFOR 命令暂停 10 分钟。然后我会运行 ChildA 包。

    我会为 ChildB 等重复该模式。由于每个 For 循环容器是独立的,它们将独立循环。每个单独的 Loop Container 都会在循环之前等待它的子包完成。

    您需要添加一些机制来停止循环,例如检查系统时间,计算循环次数或类似情况。该测试将进入每个 For 循环的 EvalExpression 属性。

    【讨论】:

    • 如果其中一个子包失败,这不会导致问题吗?整个循环不会失败,然后必须重新启动父包吗?
    • 这似乎与您的原始问题不同,但无论如何您都可以配置一个 SSIS 包以在发生错误时继续。您还可以配置启动 ParentA 包的作业以定期运行,例如每 10 分钟一次。在 ParentA 因任何原因终止之前,这不会产生任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多