2014-03-05 58 views
0

我有一个SSIS包计划在SQLAgent的每个X分钟运行,如果满足某些条件,它会执行大量的子包。我遇到的问题是,有时候某些子包需要比X分钟运行更长的时间,这意味着除非所有子包完成,否则其他任何东西都不能运行。同时通过SQLAgent运行一个SSIS包的多个实例

这也意味着在运行期间,运行子包的条件可能已经到来并且即将到来,这意味着即使原始包完成时它们也不会运行。

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

ParentA计划每10分钟运行一次,在10:00启动并满足ChildA的标准。 ChildB需要在上午10点20分运行,它不会被满足,因此它不会运行。 ChildA需要3个小时才能完成。

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

如何在没有2+ ParentA的情况下执行此操作,并且必须执行一些奇特的编码操作,以便多个子包的多个实例不会被启动?

感谢

回答

0

,使其一旦开始,不会结束,但有一系列的推出儿童套餐环路我会改变ParentA包。

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

我会重复ChildB等模式等。因为每个For循环容器是独立的,他们将独立循环。在循环之前,每个Loop容器都将等待它的Child包完成。

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

+0

如果其中一个子包失败,这不会导致问题吗?整个循环不会失败,然后父包将不得不重新启动? – user1238918

+0

这似乎与您的原始问题是分开考虑的,但无论如何,如果发生错误,您可以配置SSIS包以继续。您还可以配置启动ParentA软件包的作业,以便按照定期计划运行,例如每10分钟一班。直到ParentA由于任何原因终止,这将不会有任何效果。 –

相关问题