如果在执行过程中修改了 SQL Server 作业步骤,会发生什么情况



我们使用SQL Server 2008,并且有一个通常运行18+小时并且具有许多步骤的作业。我已经搜索过,似乎找不到关于在执行过程中修改作业时会发生什么的答案。以下是我今天在执行期间对作业所做的更改的摘要:

1(我在"步骤2"位置插入了一个新步骤。作业已在步骤 15 中,因此大概此步骤在下次运行作业之前不会触发。

2(我删除了最后一步(步骤#30(。

3(我将步骤29从"转到下一步"修改为"退出报告成功"。

由于今天进行更改时步骤 #15 正在进行中,因此我对最后步骤所做的更改是否会在作业今天到达该点时生效,还是仅在下次运行时生效?

另外,我在 #2 位置插入新步骤的事实是否会对当前运行的步骤顺序产生不利影响?

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

在我的特定场景中,我在 #2 位置添加了一个步骤。这导致所有后续步骤号在更新时递增 1。当我更新它时,作业正在运行步骤 #15,因此步骤 #15 在更新后变成了 #16。因此,当步骤 #15 完成时,再次执行相同的存储过程(新步骤 #16(。

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

最重要的是,最佳做法是在执行期间不更新作业。结果是可以预测的,但除非你能承受运行两次或根本不运行的步骤,否则不建议这样做。

我使用 SQL Managment Studio 2012 Service Pack 3,答案是视情况而定

  • 想象一下,Job #1有三个步骤。
  • Step 3触发Job #2 .
  • Job #1正在Step 2
  • 我还不希望它运行"步骤 3",所以我将代码更改为 SELECT 1 并注释掉EXEC msdb.dbo.sp_start_job job #2行。
  • 作业 #1 完成Step 2并在Step 3上触发Job #2
代码更改

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

相关内容

最新更新