如果在执行期间修改SQL Server作业步骤会发生什么?

10
我们使用的是 SQL Server 2008,有一个通常运行18小时以上且包含多个步骤的作业。我已经搜索了很多,但似乎找不到关于在执行过程中修改作业会发生什么的答案。以下是我今天在执行过程中对作业所做更改的摘要:
1)我在“步骤2”位置插入了一个新步骤。由于该作业已经运行至第15步,因此可以推断此步骤直到下一次运行该作业时才会启动。
2)我删除了最后一个步骤(步骤#30)。
3)我将步骤29从“转到下一步”修改为“退出报告成功”。
由于在我今天进行更改时,步骤#15正在进行中,那么我对最终步骤所做的更改是否会在今天该作业到达该点时生效,还是只有在下一次运行时才会生效?
此外,我在#2位置插入新步骤的事实是否会对当前运行的步骤顺序产生不良影响?

我认为在下一次执行之前不会有任何变化 - 该作业已经加载到内存中并正在运行。然而,我找不到任何支持这个想法的文档 - 那么为什么不尝试一下并找出答案呢?例如,在执行过程中添加一个步骤,将输出到一个未使用的表格,并查看是否有任何输出? - Bridge
如果在作业运行时执行它,它不会发生任何事情。它不会中断或开始运行更改或其他任何操作。它只会在下一次运行时生效。 - Wes Palmer
2个回答

12

我在作业完成后进行了检查,现在得出了一个结论。在执行过程中修改作业确实会影响作业的当前执行。根据作业历史记录,在SQL Server 2008中处理作业是基于步骤编号一次执行一步。当作业正在执行时,这些步骤不会加载到内存中或以任何其他方式存储。

在我的具体情况下,我在#2位置添加了一个步骤。这导致所有随后的步骤编号在更新时增加了一个。当我更新时,该作业正在运行第15个步骤,因此第15个步骤在更新后变为第16个步骤。因此,当第15个步骤完成时,将再次执行相同的存储过程(新的第16个步骤)。

此外,由于我删除了作业的最后一个步骤,当作业到达该步骤时它将不会被执行,因为它已不再是作业的一部分。

总之,最佳实践是不要在执行期间更新作业。结果是可预测的,但除非您可以承担步骤运行两次或根本不运行的风险,否则不建议这样做。


0

我使用的是SQL Managment Studio 2012 Service Pack 3,答案是“这取决于情况”。

例子

  • 假设作业#1有三个步骤。
  • Step 3触发作业#2
  • 作业#1Step 2上。
  • 我不想让它运行“Step 3”,所以我将代码更改为SELECT 1并注释掉EXEC msdb.dbo.sp_start_job job #2这一行。
  • 作业#1完成Step 2并在Step 3上触发作业#2

代码更改没有任何效果的原因是该作业已经在运行,并且在其自己的本地副本上运行脚本,随后的代码更改不会影响它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接