Sql server 如何基于作业名称批量更新SQL Server代理作业重试尝试
我对运行SQL Server比较陌生,需要一些帮助来完成我刚完成的任务 我需要更新很多SQL代理作业,但不是全部。我只需要更新名称中有特定单词的名称(如“%Test%”)。 我需要在每一项中设置两件事:重试尝试(到2次)和重试间隔(到10分钟) 因为这是一个生产服务器,所以我无法真正安装任何第三方程序或重新启动服务器,或诸如此类的事情。我只能运行查询/存储过程 服务器正在运行Windows server 2012标准6.2和Microsoft SQL server 2016 13.0.5366.0。我使用TSQL和SSMS 任何帮助都将不胜感激 编辑: 问题解决了。使用游标和存储过程sp_update_jobstep的组合。谢谢大家的帮助 我为此编写的代码:Sql server 如何基于作业名称批量更新SQL Server代理作业重试尝试,sql-server,tsql,configuration,automation,windows-server-2012,Sql Server,Tsql,Configuration,Automation,Windows Server 2012,我对运行SQL Server比较陌生,需要一些帮助来完成我刚完成的任务 我需要更新很多SQL代理作业,但不是全部。我只需要更新名称中有特定单词的名称(如“%Test%”)。 我需要在每一项中设置两件事:重试尝试(到2次)和重试间隔(到10分钟) 因为这是一个生产服务器,所以我无法真正安装任何第三方程序或重新启动服务器,或诸如此类的事情。我只能运行查询/存储过程 服务器正在运行Windows server 2012标准6.2和Microsoft SQL server 2016 13.0.5366.
USE msdb ;
DECLARE @jobname nvarchar (max);
DECLARE cursor_asd CURSOR
FOR SELECT
jb.name
FROM msdb.dbo.sysjobs jb
WHERE name like '%Delta%';
OPEN cursor_asd;
FETCH NEXT FROM cursor_asd INTO
@jobname;
WHILE @@FETCH_STATUS = 0
BEGIN
Print @jobname
EXEC dbo.sp_update_jobstep
@job_name = @jobname,
@step_id = 1,
@retry_attempts = 2,
@retry_interval = 5 ;
FETCH NEXT FROM cursor_asd INTO
@jobname;
END;
CLOSE cursor_asd;
DEALLOCATE cursor_asd;
如果您使用的是SQL Server 2016或更高版本,则可以使用。在做所有工作之前,要非常小心,对一些工作进行彻底的测试。查看其文档以了解更多信息 msdb.dbo.sp\u update\u jobstep
SQL代理作业的重试尝试是在每个作业步骤中定义的。如果作业包含多个步骤,则必须确定要更新的步骤,除非您只是在所有步骤上设置相同的重试 这里基本上有两张桌子:
- 重试\u次尝试次数-如果步骤失败,重试次数
- 重试\u间隔-重试尝试之间等待的时间量,以分钟为单位
SELECT [jbs].* --I'm just returning the job step columns here as an example
FROM [msdb].[dbo].[sysjobs] [jb]
INNER JOIN [msdb].[dbo].[sysjobsteps] [jbs]
ON [jbs].[job_id] = [jb].[job_id]
WHERE [jb].[name] LIKE '%Test%' --Job Name Filter
AND [jbs].[step_name] = 'JobStepName'; --Use this if needing to filter to a specific job step.
一旦返回了要更新的正确作业步骤,我们就可以轻松地将其转换为update语句:
UPDATE [jbs]
SET [jbs].[retry_attempts] = '2' --retry 2 times
, [jbs].[retry_interval] = '10' --every 10 minutes
FROM [msdb].[dbo].[sysjobs] [jb]
INNER JOIN [msdb].[dbo].[sysjobsteps] [jbs]
ON [jbs].[job_id] = [jb].[job_id]
WHERE [jb].[name] LIKE '%Test%' --Job Name Filter
AND [jbs].[step_name] = 'JobStepName'; --Use this if needing to filter to a specific job step.
什么版本的SQL Server?运行此查询以查找。挑选@@VERSION@IsaacWindows Server 2012标准6.2上的Microsoft SQL Server 2016 13.0.5366.0(X64)