在无限循环中运行SQL代理作业

时间:2013-07-08 08:38:01

标签: sql-server sql-agent-job

有一个SQL代理作业,其中包含执行某些ETL作业的复杂Integration Services包。运行需要1到4个小时,具体取决于我们的数据来源。 Job目前每天运行,没有任何问题。我现在要做的是让它在无限循环中运行,这意味着:当它完成后,重新开始。

调度程序似乎不提供此选项。我发现在最后一步完成后可以使用steps接口转到第一步,但使用该方法时出现问题:如果我需要停止工作,我需要以有力的方式做到这一点。但是我希望能够在下一次迭代后让工作停止。我怎么能这样做?

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

既然Martin和Remus都没有给出答案,这里就是一个,所以这个问题可以被接受。 最好的方法是简单地将运行频率设置为非常低的值,例如一分钟。如果它已在运行,则不会创建第二个实例。如果要在当前运行后停止作业,只需禁用计划。

谢谢!

答案 1 :(得分:1)

所以你想要在你想要停止工作时,在运行迭代之后,它应该停止 - 如果我正确地找到你。

你可以在这做一件事。

  1. 有一个配置表,其中包含布尔值。
  2. 在作业中添加一个步骤。即在迭代之前,检查表中的值。如果是,那么只运行ETL包。
  3. 所以,每当它发现它的真实时,它就会跟随无限循环。
  4. 如果要停止作业,请将表中的值设置为false。
  5. 当前作业迭代完成后,它会从你的表中找到值,会发现它是假的,迭代会停止。

答案 2 :(得分:1)

你总是可以设置“成功”动作转到第一步,创建一个无限循环,但正如你所说,如果你想要停止工作,你将不得不强制它。

除此之外,数据库上的一个简单控制表具有状态,第二个作业查询该表并根据状态触发主作业。在这里可能的架构,只需选择一个更适合你的那个

答案 3 :(得分:1)

您可以在数据库中使用服务代理。您需要运行的作业可以通过排队“开始”消息来启动,当它完成时,它可以向自己发送一条消息以重新开始。

要暂停该过程,您只需停用队列处理器即可。