有的作业非常大, 可能运行时间超长,从而影响白天正常生产, 因此非常有必要加一个作业来主动停止大作业。
1. 创建存储过程, 脚本如下。
2. 新增一个作业, 名称为: Stop_BigJob
步骤语句: EXEC dbo.Proc_DBA_StopJob 'sp_Archive' --作业名称自己改
作业计划:每天6点整运行
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].Proc_DBA_StopJob') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].Proc_DBA_StopJob
GO
-- =============================================
-- Author: yenange
-- Create date: 2017-12-07
-- Description: 如果某个作业还在运行, 则立即停止它
-- =============================================
CREATE PROCEDURE dbo.Proc_DBA_StopJob
@jobName NVARCHAR(100)='sp_Archive'
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(
SELECT 1 FROM
MASTER.sys.sysprocesses AS A INNER JOIN msdb.[dbo].[sysjobs] AS B ON
a.[program_name] LIKE 'SQLAgent%'+RIGHT(CAST(B.[job_id] AS VARCHAR(100)),10)+'%'
AND b.[name] = @jobName
)
BEGIN
EXEC msdb.dbo.sp_stop_job @jobName;
PRINT @jobName+' 已停止!'
END
ELSE
BEGIN
PRINT @jobName+' 不存在或没有运行,不作处理!'
END
END
GO
EXEC sys.sp_addextendedproperty
@name=N'Version', @value=N'1.0' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'PROCEDURE',@level1name=N'Proc_DBA_StopJob'