Sql server 如何获取SQL server作业以重新启动自身?

Sql server 如何获取SQL server作业以重新启动自身?,sql-server,Sql Server,对于我们遇到的一个问题,我有点困惑,让我尽我所能解释一下情况、问题以及我们所做的尝试 我们有一个SQL作业,它记录到一个特定的文件,该文件的末尾附加了一个日期 第一步检查我们的日志文件是什么,例如log_01012012.log,如果这不正确,我们将更新sysjobsteps表,以获得所有步骤的新文件位置,例如log_02012012.log。我们通过在第一个作业步骤中调用存储过程来实现这一点。 虽然这在表中得到更新,但其余步骤仍使用旧日志,因为我假设在作业开始时,此表只读取一次。 我们已尝试使

对于我们遇到的一个问题,我有点困惑,让我尽我所能解释一下情况、问题以及我们所做的尝试

我们有一个SQL作业,它记录到一个特定的文件,该文件的末尾附加了一个日期 第一步检查我们的日志文件是什么,例如log_01012012.log,如果这不正确,我们将更新sysjobsteps表,以获得所有步骤的新文件位置,例如log_02012012.log。我们通过在第一个作业步骤中调用存储过程来实现这一点。 虽然这在表中得到更新,但其余步骤仍使用旧日志,因为我假设在作业开始时,此表只读取一次。 我们已尝试使用以下代码在存储过程中重新启动作业:

EXEC msdb.dbo.sp_stop_job @job_name = 'My Job'
waitfor delay '00:00:15'
EXEC msdb.dbo.sp_start_job @job_name = 'My Job'
但是,当我们终止作业时,它看起来就像终止了存储过程一样,我猜它是作业的子过程,这意味着它永远不会进入重新启动作业的步骤

有没有一种方法可以让作业重新启动,以便它再次查看sysjobsteps表并使用正确的日志位置

可能解决这个问题的办法是

能够从作业本身重新启动作业 能够在某些方面更新工作。
任何我需要澄清的事情,我都会尽我最大的努力,但我们目前陷入困境,所有的意见都将不胜感激

转到SSMS上的sql server代理

扩大就业

创造就业机会, 定义sp或简单查询的步骤 定义sqlserver重新启动时作业的启动频率或启动频率 设置作业完成成功/失败时向您发送电子邮件的通知
希望这对您有所帮助。

您可以通过ServiceBroker做一些有趣的事情。比如:

1将消息放入代理队列作为作业的最后一步。内容可以是空的;这只是一个表示嗨。。。该作业需要重新提交

2为队列编写一个激活存储过程,该过程会像在现有过程中那样造成延迟,然后重新提交作业


或者,您不必在作业步骤中硬编码日志文件名,而是将该数据放在表中的某个位置。然后,在更改位置的步骤中,将成功条件定义为转到下一步,将失败条件定义为转到步骤1。然后修改更改文件位置的代码,以返回一个错误,从而触发作业步骤的失败条件。

意识到这已经有将近十年的历史了,但我遇到了同样的问题,并解决了它,如下所示。使用OP建议的代码:

EXEC msdb.dbo.sp_start_job @job_name = 'My Job A'

只需创建一对匹配的作业,每个作业都有一个相同的第一步执行实际工作,最后一步包含上述代码,但指向相反的作业名称。据我所知,基本上您无法从同一个作业本身重新启动。只要确保您在“高级”选项卡中设置步骤行为,以便在每种情况下执行最后一步,作业就会无限期地隆隆运行。

Hi Rhian,我们不需要按常规计划运行作业,这是检查条件的第一步,如果满足条件,则更新sysjobsteps表,这意味着我们必须重新启动它,以便在其余步骤中获取新值