如果 SQL Server 作业已经在运行,它会跳过计划运行吗?

Posted

技术标签:

【中文标题】如果 SQL Server 作业已经在运行,它会跳过计划运行吗?【英文标题】:Will a SQL Server Job skip a scheduled run if it is already running? 【发布时间】:2010-10-26 06:55:22 【问题描述】:

如果您安排 SQL Server 作业每 X 分钟运行一次,并且它在 # of minutes 结束之前没有完成上一次调用,它会跳过运行,因为它已经在运行,还是会运行两次执行相同步骤的作业实例?

【问题讨论】:

【参考方案1】:

SQL Server 代理在开始新的迭代之前检查作业是否已经在运行。如果您有长时间运行的作业并且它的时间表出现了,它将被跳过,直到下一个间隔。

您可以自己尝试一下。如果您尝试启动一个已经在运行的作业,您将收到一个错误。

【讨论】:

太棒了,这正是我想知道的。我有一个电子邮件检查器,有时需要一段时间才能下载大型电子邮件。因为它每分钟运行一次,所以如果第一个作业尚未完成,第二个作业实例不会启动,这一点非常重要。 有什么办法可以实现这一点,我的意思是避免跳过并开始另一个工作实例?或者只是可以完成创建另一个 SQL 作业?谢谢 @Jose,问题。我不希望 SQL 服务器说这是错误或错误。刚刚跳过。我怎样才能确保是这样?谢谢【参考方案2】:

如果它正在运行,我很确定它会跳过它。

【讨论】:

【参考方案3】:

您使用的是哪个版本的 SQL Server?这似乎是一件很容易测试的事情。设置其中包含 WAITFOR 的作业,将单行插入表中,并将作业设置为快速连续运行两次(比 WAITFOR DELAY 短)。

在 SQL Server 2005 中运行此类测试时,它会跳过重叠的运行。

【讨论】:

我正在考虑这样做 - 但谷歌搜索似乎更容易......瞧

以上是关于如果 SQL Server 作业已经在运行,它会跳过计划运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 代理作业不执行 SSIS 包权限错误

SQL Server作业失败 - 帐户被锁定

从SQL Server代理作业步骤调用时,SSIS包不会运行

sql server 用脚本管理作业

使用 ssis 包在 SQL Server 代理作业中找不到存储过程错误

从SQL Server代理(作业)运行C#控制台应用程序?