USE [HCITools] GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_Check_Long_Running_Jobs]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[mon_Check_Long_Running_Jobs] GO USE [HCITools] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[mon_Check_Long_Running_Jobs] @in_debug tinyint = 0 AS /*============================================================================= Explication du traitement realise par la SP ------------------------------------------- La SP va vérifier s'il y a des jobs qui tournent depuis plus de 2 heures Contexte d'utilisation ---------------------- Appelé depuis le job DR92050 - Long Running Jobs Parametres ---------- @in_debug : non utilisé Creation : 28.10.16 / FLA Modifications : 13.01.2017 / RTC Ignore REPL-Merge jobs for Pham index instances. 21.04.2017 / FLA Ignore all jobs of replication 17.03.2022 / FLA : Change DBA mail 29.12.2023 / RTC : Ignore Datamart specific jobs =============================================================================*/ set nocount on; /*------------------- Declaration des variables --------------------*/ DECLARE @message VARCHAR(255) DECLARE @running_jobs TABLE ( [Job ID] uniqueidentifier, [Last Run Date] INT, [Last Run Time] INT, [Next Run Date] INT, [Next Run Time] INT, [Next Run Schedule ID] INT, [Requested To Run] INT, [Request Source] INT, [Request Source ID] NVARCHAR(128), [Running] INT, [Current Step] INT, [Current Retry Attempt] INT, [State] INT ) /*------------ Affectation des parametres aux variables ------------*/ SELECT @message = 'Jobs non terminés:' + CHAR(10) + '------------------------------' + char(10) /*-------------------------- Traitement ---------------------------*/ BEGIN TRY INSERT INTO @running_jobs EXEC master.dbo.xp_sqlagent_enum_jobs 1,'' SELECT @message = @message + sj.name + ' : ' + convert(VARCHAR(10),datediff( mi, ja.run_requested_date, getdate())) + ' minutes' + char(10) FROM @running_jobs rj JOIN msdb.dbo.sysjobs sj WITH (NOLOCK) ON sj.job_id = rj.[Job ID] JOIN msdb.dbo.sysjobactivity ja ON ja.job_id = sj.job_id AND ja.session_id = (SELECT TOP 1 ja2.session_id FROM msdb.dbo.sysjobactivity ja2 WHERE ja2.job_id = sj.job_id ORDER BY ja2.run_requested_date DESC) JOIN msdb.dbo.syscategories c WITH (NOLOCK) ON c.category_id = sj.category_id AND c.name NOT LIKE 'REPL%' AND sj.name NOT LIKE '%Datamart specific' WHERE rj.[Running]=1 AND ( DATEDIFF( mi, ja.run_requested_date, GETDATE()) > 5 and sj.name like 'DR%' OR DATEDIFF( mi, ja.run_requested_date, GETDATE()) > 120 and sj.name not like 'DR%') IF @@ROWCOUNT > 0 BEGIN EXEC aps_Send_Mail_with_template @in_param_varchar_2 = 'DBA_operator;', @in_param_message = @message; END /*---------------------- Traitement des erreurs ----------------------*/ END TRY BEGIN CATCH /* Traitement des erreurs (avec RaiseError) */ EXEC dbo.get_Error_Info @in_RaiseError = 1 END CATCH GO