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

时间:2016-04-06 15:35:06

标签: sql-server sql-server-2008 tsql

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

1)我在第2步'中插入了新步骤。位置。这项工作已经在第15步了,所以大概这个步骤要到下次工作运行才会开始。

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

3)我修改了步骤29,然后转到下一步'退出报告成功'。

由于当我今天进行更改时第15步正在进行中,我对最终步骤所做的更改是否会在作业到达今天时生效,或者它们只会在下次运行时生效?

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

2 个答案:

答案 0 :(得分:8)

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

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

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

最重要的是,最佳做法是不要在执行期间更新作业。结果是可预测的,但除非您能够承担两次或根本不运行的步骤,否则它是不推荐。

答案 1 :(得分:0)

我使用SQL Managment Studio 2012 Service Pack 3,答案是它取决于

示例

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

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