3

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

调度程序似乎没有提供此选项。我发现可以在最后一步完成后使用steps界面进入第一步,但是使用该方法有一个问题:如果我需要停止工作,我需要以强制的方式这样做. 但是,我希望能够在下一次迭代后让工作停止。我怎样才能做到这一点?

提前感谢您的帮助!

4

4 回答 4

3

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

谢谢!

于 2013-08-26T07:36:24.997 回答
1

所以你希望当你想停止工作时,在运行迭代之后,它应该停止 - 如果我让你正确的话。

你可以在这里做一件事。

  1. 有一张用于配置的表,该表具有布尔值。
  2. 在工作中添加一个步骤。即在迭代之前,检查表中的值。如果是真的,那么只运行 ETL 包。
  3. 因此,每次它找到它的真实性时,它都会遵循无限循环。
  4. 如果要停止作业,请将表中的值设置为 false。
  5. 当前作业迭代完成后,它会从您的表中查找值,发现它为假,然后迭代将停止。
于 2013-07-08T08:45:35.740 回答
1

您始终可以将“成功”操作设置为转到第一步,从而创建一个无限循环,但是正如您所说,如果您想停止工作,则必须强制执行。

除此之外,数据库上有一个简单的控制表,其中包含状态和第二个作业,该作业查询该表并根据状态触发您的主要作业。这里有许多可能的架构,只需选择更适合您的架构

于 2013-07-08T08:46:03.427 回答
1

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

要暂停进程,您只需停用队列处理器。

于 2013-07-08T08:47:41.623 回答