我们使用SQL Server 2008并且拥有一项通常运行18个小时以上并且有许多步骤的工作。我已经搜索过,似乎找不到在执行期间修改作业时会发生什么的答案。以下是我今天执行期间对工作所做的更改的摘要:
1)我在第2步'中插入了新步骤。位置。这项工作已经在第15步了,所以大概这个步骤要到下次工作运行才会开始。
2)我删除了最后一步(步骤#30)。
3)我修改了步骤29,然后转到下一步'退出报告成功'。
由于当我今天进行更改时第15步正在进行中,我对最终步骤所做的更改是否会在作业到达今天时生效,或者它们只会在下次运行时生效?
此外,我在#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 #1
在Step 2
SELECT 1
并注释掉EXEC msdb.dbo.sp_start_job job #2
行。 Step 2
并触发Job #2
上的Step 3
。 代码更改没有任何影响的原因是因为作业已在运行,并且在其自己的脚本本地副本上运行,后续代码更改不会影响。