2012-05-11 26 views
1

我们遇到的问题有点困难,让我尽我所能解释场景,问题以及我们所尝试的。如何获得SQL Server作业以重新启动?

  1. 我们有它记录到标有追加到结束日期的特定文件的SQL作业
  2. 第一步检查我们的日志文件是什么例如log_01012012.log,如果这是不正确的,我们更新表sysjobsteps以获得所有步骤的新文件位置 - 例如log_02012012.log。我们通过在第一个工作步骤中调用存储过程来完成此操作。
  3. 虽然这在表中得到更新,但剩余的步骤仍使用旧日志,这是由于我假定该表只在作业启动时读取一次。

我们试图用下面的代码存储的过程中重新启动作业:

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表并使用正确的位置进行日志记录?

事情可能会解决这一问题将是

  • 能够从工作本身
  • 如果能够刷新工作在某些方面重新开始工作。

任何我需要澄清我会尽我所能,但我们目前卡住,所有的输入将不胜感激!

回答

0

到SQL Server代理上SSMS

展开作业

  1. 创建一个作业,
  2. 定义的步骤(SP或简单的查询)
  3. 定义的日程表(多久或者甚至在sqlserver重新启动时启动作业)
  4. 设置通知,在作业完成时向您发送电子邮件(成功代理/失败)

希望这有助于。

+0

嗨,Rhian,我们不需要定期运行这个工作,它是检查一个条件的第一步,如果遇到了更新sysjobsteps表,那么意味着我们必须重新启动它才能执行剩下的步骤新的价值 – purchas

0

您可以使用Service Broker进行一些操作。例如:

1)将消息放入代理队列中作为工作的最后一步。内容可以是空的;这只是一个表示“嘿......这份工作需要重新提交”的标志。

2)写出在延迟提出(就像你你已经存在的过程中做的),然后重新提交作业

,或队列的激活存储过程,而不是你的硬编码的日志文件名在工作步骤中,将这些数据放在某个表的某个表中。然后,在您更改位置的步骤中将成功条件定义为“转到下一步”,并将失败条件定义为“转到步骤1”。然后修改更改文件位置的代码以返回错误(从而触发作业步骤的失败情况)。

相关问题