USE [msdb]
GO
/****** Object: StoredProcedure [dbo].[kill_elapsed_job_by_name] Script Date: 2017/9/26 16:09:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[kill_elapsed_job_by_name]
(@jobname NVARCHAR(100)='D0400_updateBaseData')
AS
-- =============================================
-- Created By: systemadmin
-- Created Date: 2017/9/26 15:45:11
-- Description: dbo.kill_elapsed_job_by_name
-- Modified By:
-- Modified Date:
-- Comments:
-- =============================================
BEGIN
SET NOCOUNT ON;
/*BEGIN TRY*/
BEGIN TRY
DECLARE @Elapsed INT=0
,@cfg_elapsed INT=0
SELECT
@cfg_elapsed=cej.[Elapsed(s)]
FROM
cfg_Elapsed_job AS cej WHERE cej.name=@jobname
SELECT @Elapsed=DATEDIFF(SECOND, activity.run_requested_date, GETDATE())
FROM
msdb.dbo.sysjobs_view JOB
JOIN
msdb.dbo.sysjobactivity activity
ON
JOB.job_id = activity.job_id
JOIN
msdb.dbo.syssessions sess
ON
sess.session_id = activity.session_id
JOIN
(
SELECT MAX(agent_start_date) AS max_agent_start_date
FROM
msdb.dbo.syssessions
) sess_max
ON
sess.agent_start_date = sess_max.max_agent_start_date
WHERE JOB.name =@jobname AND
run_requested_date IS NOT NULL AND stop_execution_date IS NULL
IF @Elapsed>@cfg_elapsed
BEGIN
INSERT INTO log_Elapsed_job
SELECT JOB.name,JOB.job_id,JOB.originating_server,activity.run_requested_date,
DATEDIFF(SECOND, activity.run_requested_date, GETDATE()) AS Elapsed, GETDATE() updatedate,'Kill'act
FROM
msdb.dbo.sysjobs_view JOB
JOIN
msdb.dbo.sysjobactivity activity
ON
JOB.job_id = activity.job_id
JOIN
msdb.dbo.syssessions sess
ON
sess.session_id = activity.session_id
JOIN
(
SELECT MAX(agent_start_date) AS max_agent_start_date
FROM
msdb.dbo.syssessions
) sess_max
ON
sess.agent_start_date = sess_max.max_agent_start_date
WHERE JOB.name = @jobname AND
run_requested_date IS NOT NULL AND stop_execution_date IS NULL
EXEC msdb.dbo.sp_stop_job @jobname
END
ELSE
BEGIN
PRINT 'JOb '+@jobname+' ran for '+cast( @Elapsed AS NVARCHAR(10))+'s'
END
/*CATCHING @@ERROR*/
IF @@ERROR>0
RAISERROR ('Error raised in TRY block.1', 16, 1 );/*[0-10]:CONTINUE;[11-19]:jump to catch*/
END TRY
/*END TRY*/
BEGIN CATCH
/*DECLARE*/
DECLARE @ErrorMessage NVARCHAR(4000),
@ErrorSeverity NVARCHAR(5),
@ErrorState NVARCHAR(5),
@ERROR_NUMBER NVARCHAR(5),
@ERROR_LINE NVARCHAR(5),
@ERROR_PROCEDURE NVARCHAR(100)
/*SET VALUES*/
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ERROR_NUMBER = ERROR_NUMBER(),
@ERROR_LINE = ERROR_LINE(),
@ERROR_PROCEDURE = CASE ISNULL(ERROR_PROCEDURE(), '') WHEN '' THEN '' ELSE 'Error occur when running procedure: [' + ERROR_PROCEDURE() + '];' END;
/*FORMATING MSG*/
SET @ErrorMessage = @ERROR_PROCEDURE + CHAR(10)
+ 'Msg:' + @ErrorMessage + ' Line:' +CAST(@ERROR_LINE AS NVARCHAR) + ' Number:' +CAST( @ERROR_NUMBER AS nvarchar)
+ CHAR(10)
+ 'Date:' + CONVERT(NVARCHAR(30), GETDATE(), 120)
/*RAISERROR*/
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;
RETURN 0
END
GO
/****** Object: Table [dbo].[cfg_Elapsed_job] Script Date: 2017/9/26 16:09:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[cfg_Elapsed_job](
[name] [sysname] NOT NULL,
[Elapsed(s)] [int] NOT NULL,
[retry] [int] NOT NULL,
[update_date] [datetime] NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[log_Elapsed_job] Script Date: 2017/9/26 16:09:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[log_Elapsed_job](
[name] [sysname] NOT NULL,
[job_id] [uniqueidentifier] NOT NULL,
[originating_server] [nvarchar](128) NULL,
[run_requested_date] [datetime] NULL,
[Elapsed] [int] NULL,
[updatedate] [datetime] NOT NULL,
[act] [varchar](4) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'同步密码和激活状态不一致用户', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D2200_inputDB团队业绩汇总表', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D1731_updateDailyReport', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0305_1_HR_Excel_192.168.10.101_HR', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0500_InputDataToOOS_VIP', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D1130_UpdateKPIAlert', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0300_G_CLASS_override', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'更新POS推进简报', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0400_updateBaseData', 14400, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'同步OOS基础数据_至正式环境', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'Vika updateMOR040KPI专卖店单产', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'M0300_净水器销售数据', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'LogBackup.Subplan_1', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D1745_UpdateSSAS', 14400, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D2300_Lis_Import_PickCompleteRate', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'SSIS Server Maintenance Job', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0800_inputData2OOS_SafeStock', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0400_updateBaseData_bak', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'零配件返还津贴导入', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'patch_refresh_rpt_kpi_t_cal_data_by_month', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0630_updateReports', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'M0801_UpdateMOR_HR_Import', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'POSbackupPlan.Daily', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'M0300_净水系统上报销售记录月汇总', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'M0800_UpdateMOR', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'W_011500UpdateWr每周捷报', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D1440_update区域周报', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'W0300_净水系统上报销售记录周汇总', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'M0840_导入积分数据', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'D0700_updateMember2016', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'同步OOS基础数据', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'RportDB.Subplan_1', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'W_2300UpdateKPIAlert_WeeklyClear', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[cfg_Elapsed_job] ([name], [Elapsed(s)], [retry], [update_date]) VALUES (N'syspolicy_purge_history', 3600, 1, CAST(0x0000A7FA010272A9 AS DateTime))
INSERT [dbo].[log_Elapsed_job] ([name], [job_id], [originating_server], [run_requested_date], [Elapsed], [updatedate], [act]) VALUES (N'D0400_updateBaseData', N'15afeb74-d96e-40de-904a-4de07909f67c', N'CHN1VRDB03', CAST(0x0000A7FA00FCBB38 AS DateTime), 1897, CAST(0x0000A7FA01056AA6 AS DateTime), N'Kill')
设成作业,每十分钟检索一次
USE [msdb]
GO
/****** Object: Job [中停超时作业] Script Date: 2017/9/26 16:11:58 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 2017/9/26 16:11:59 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'中停超时作业',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'无描述。',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'ukl001', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [中停超时作业] Script Date: 2017/9/26 16:11:59 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'中停超时作业',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec dbo.[kill_elapsed_job_by_name] ''D0400_updateBaseData''
go
exec dbo.[kill_elapsed_job_by_name] ''D1745_UpdateSSAS''
',
@database_name=N'msdb',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'每 10 分钟 执行',
@enabled=1,
@freq_type=8,
@freq_interval=126,
@freq_subday_type=4,
@freq_subday_interval=10,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20170926,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=N'830b0405-1795-4efb-aa7b-980fc0c480e4'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO