【问题标题】:SQL Agent that runs SQL agents doesn't wait between steps运行 SQL 代理的 SQL 代理不会在步骤之间等待
【发布时间】:2015-06-02 00:39:19
【问题描述】:

我有一个 SQL 代理作业,我想使用以下方法启动其他 4 个 SQL 代理作业:

EXEC msdb.dbo.sp_start_job 'My Other Job'

现在每个作业都有自己的步骤,但是,作业不会等待作业是否成功完成,它只是开始下一步,因此所有 4 个都同时运行。有没有办法让它在开始下一个工作之前等待?

谢谢

【问题讨论】:

  • 否,但可能有一种解决方法可以解决您需要做的事情。就不能在你的主要工作中做其他工作步骤的步骤吗?
  • 这 4 个作业是跨网络的数据库恢复,因此它们的运行时间存在差异。我想避免跑步重叠。
  • This article 包含一个包含 sp_start_job 的存储过程,并在退出过程之前等待作业完成。您可以使用它来使您的作业同步运行。
  • 看来你不是一个人在这个问题上,a connect item 被打开以使sp_start_job 同步运行,不幸的是这个已经关闭了,因为不会修复。我认为唯一的选择是创建自己的侦听器以继续检查作业是否已完成,或者创建一个结合单独作业的所有步骤的单个作业,两者都不是很理想!

标签: sql-server sql-server-2008


【解决方案1】:

我已经等过这个了:

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'My Other Job' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    WAITFOR DELAY '00:00:02';   
end

你可以暂停任何有意义的事情。我的工作比较小,所以检查之间只等了 2 秒。

【讨论】:

    【解决方案2】:

    SQL 代理作业步骤会等待它收到“成功”消息,然后再进行下一步。但是,当该步骤调用 msdb.dbo.sp_start_job 时,它会在目标作业启动后立即收到“成功”消息。消息说“是的,我成功地开始了工作”。

    如果这是您使用的方法,则无法让它等待该作业的完成。

    但是,如果您将五个作业合并为一个作业,并将步骤按您想要的顺序排列,则每个步骤都会等到上一步完成后再开始。

    【讨论】:

    • 感谢您的洞察,我觉得这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多