有一个SQL代理作业,其中包含执行某些ETL作业的复杂Integration Services包。运行需要1到4个小时,具体取决于我们的数据来源。 Job目前每天运行,没有任何问题。我现在要做的是让它在无限循环中运行,这意味着:当它完成后,重新开始。
调度程序似乎不提供此选项。我发现在最后一步完成后可以使用steps接口转到第一步,但使用该方法时出现问题:如果我需要停止工作,我需要以有力的方式做到这一点。但是我希望能够在下一次迭代后让工作停止。我怎么能这样做?
提前感谢您的帮助!
答案 0 :(得分:2)
既然Martin和Remus都没有给出答案,这里就是一个,所以这个问题可以被接受。 最好的方法是简单地将运行频率设置为非常低的值,例如一分钟。如果它已在运行,则不会创建第二个实例。如果要在当前运行后停止作业,只需禁用计划。
谢谢!
答案 1 :(得分:1)
所以你想要在你想要停止工作时,在运行迭代之后,它应该停止 - 如果我正确地找到你。
你可以在这做一件事。
答案 2 :(得分:1)
你总是可以设置“成功”动作转到第一步,创建一个无限循环,但正如你所说,如果你想要停止工作,你将不得不强制它。
除此之外,数据库上的一个简单控制表具有状态,第二个作业查询该表并根据状态触发主作业。在这里可能的架构,只需选择一个更适合你的那个
答案 3 :(得分:1)
您可以在数据库中使用服务代理。您需要运行的作业可以通过排队“开始”消息来启动,当它完成时,它可以向自己发送一条消息以重新开始。
要暂停该过程,您只需停用队列处理器即可。