174 lines
6.8 KiB
Transact-SQL
174 lines
6.8 KiB
Transact-SQL
/*=============================================================================
|
|
|
|
Création d'un package pour la gestion du monitoring des Jobs SQL
|
|
|
|
-> Mise en place des indexes nécessaires sur MSDB
|
|
-> Deploy de la SP de monitoring des jobs: Get_Job_Error_Info
|
|
|
|
Création : 24.01.2023 / SPE
|
|
|
|
Modifications :
|
|
|
|
=============================================================================*/
|
|
|
|
/* CREATION DES INDEXES */
|
|
|
|
USE [msdb];
|
|
GO
|
|
|
|
IF NOT EXISTS ( SELECT 1
|
|
FROM sys.indexes
|
|
WHERE name = 'NCIX_sysjobhistory_COL_job_id')
|
|
BEGIN
|
|
CREATE NONCLUSTERED INDEX [NCIX_sysjobhistory_COL_job_id]
|
|
ON [dbo].[sysjobhistory] ([job_id] ASC, [run_status] ASC, [sql_message_id] ASC, [run_date] ASC, [run_time] ASC)
|
|
INCLUDE ([step_name], [message])
|
|
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
|
|
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
ON [PRIMARY];
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS ( SELECT 1
|
|
FROM sys.indexes
|
|
WHERE name = 'NCIX_sysjobactivity_COL_job_id')
|
|
BEGIN
|
|
CREATE NONCLUSTERED INDEX [NCIX_sysjobactivity_COL_job_id]
|
|
ON [dbo].[sysjobactivity] ([job_id] ASC, [start_execution_date] ASC)
|
|
INCLUDE (last_executed_step_id)
|
|
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
|
|
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
|
ON [PRIMARY];
|
|
END;
|
|
GO
|
|
|
|
/* DEPLOIEMENT DE LA SP Get_Job_Error_Info */
|
|
USE [HCITools];
|
|
GO
|
|
|
|
IF EXISTS ( SELECT *
|
|
FROM sys.objects
|
|
WHERE object_id = OBJECT_ID(N'[dbo].[Get_Job_Error_Info]')
|
|
AND type IN ( N'P', N'PC' ))
|
|
DROP PROCEDURE [dbo].[Get_Job_Error_Info];
|
|
GO
|
|
|
|
SET ANSI_NULLS ON;
|
|
GO
|
|
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
|
|
CREATE PROCEDURE [dbo].[Get_Job_Error_Info]
|
|
@in_debug TINYINT = 0,
|
|
@in_JobName NVARCHAR(1000),
|
|
@in_Recipients VARCHAR(250)
|
|
AS
|
|
/*=============================================================================
|
|
|
|
Explication du traitement realise par la SP
|
|
-------------------------------------------
|
|
Cette SP sert a récupérer le message d'erreur d'un step de job et de l'envoyer par mail.
|
|
|
|
Contexte d'utilisation
|
|
----------------------
|
|
Appelée depuis le step Empty Step et Send mail KO des jobs
|
|
|
|
Parametres
|
|
----------
|
|
@in_debug : non utilisé
|
|
@in_JobName : nom du job
|
|
@in_Recipients : mail/profil du/des destinataire(s)
|
|
|
|
Creation : 1.4.16 / RTC
|
|
|
|
Modifications : 04.04.16 / FLA : normalisation de la SP, modification du paramètre d'entrée, modification de l'appel de l'envoi de mail
|
|
06.10.16 / FLA : ajout de la gestion des erreurs de query timeout
|
|
19.02.21 / SPE : Modification null message (Bug)
|
|
|
|
=============================================================================*/
|
|
|
|
SET NOCOUNT ON;
|
|
|
|
/*------------------- Declaration des variables --------------------*/
|
|
DECLARE @message NVARCHAR(MAX);
|
|
|
|
/*------------ Affectation des parametres aux variables ------------*/
|
|
SET @message = N'';
|
|
|
|
/*-------------------------- Traitement ---------------------------*/
|
|
BEGIN TRY
|
|
|
|
SELECT @message
|
|
= @message + N'STEP NAME: ' + jh.step_name + CHAR(13) + N'ERROR MESSAGE: ' + CHAR(13) + jh.message + CHAR(13)
|
|
+ CHAR(13)
|
|
FROM msdb..sysjobhistory jh
|
|
INNER JOIN msdb..sysjobactivity ja
|
|
ON ja.job_id = jh.job_id
|
|
INNER JOIN msdb..sysjobs j
|
|
ON j.job_id = ja.job_id
|
|
WHERE j.name = @in_JobName
|
|
AND run_status = 0 --and ja.stop_execution_date is null--
|
|
AND ja.session_id = ( SELECT TOP 1 session_id
|
|
FROM msdb.dbo.syssessions
|
|
ORDER BY agent_start_date DESC)
|
|
AND start_execution_date IS NOT NULL
|
|
--AND stop_execution_date is null
|
|
AND msdb.dbo.agent_datetime(run_date, run_time) >= start_execution_date;
|
|
|
|
/* Gestion des Query Timeout Error */
|
|
IF EXISTS ( SELECT 1
|
|
FROM msdb..sysjobhistory jh
|
|
INNER JOIN msdb..sysjobactivity ja
|
|
ON ja.job_id = jh.job_id
|
|
INNER JOIN msdb..sysjobs j
|
|
ON j.job_id = ja.job_id
|
|
WHERE j.name = @in_JobName
|
|
AND run_status = 1 --and ja.stop_execution_date is null--
|
|
AND ja.session_id = ( SELECT TOP 1 session_id
|
|
FROM msdb.dbo.syssessions
|
|
ORDER BY agent_start_date DESC)
|
|
AND start_execution_date IS NOT NULL
|
|
AND jh.sql_message_id = 7412
|
|
AND msdb.dbo.agent_datetime(run_date, run_time) >= start_execution_date)
|
|
BEGIN
|
|
|
|
SELECT @message
|
|
= @message + N'STEP NAME: ' + jh.step_name + CHAR(13) + N'ERROR MESSAGE: ' + CHAR(13) + jh.message
|
|
+ CHAR(13) + CHAR(13)
|
|
FROM msdb..sysjobhistory jh
|
|
INNER JOIN msdb..sysjobactivity ja
|
|
ON ja.job_id = jh.job_id
|
|
INNER JOIN msdb..sysjobs j
|
|
ON j.job_id = ja.job_id
|
|
WHERE j.name = @in_JobName
|
|
AND run_status = 1 --and ja.stop_execution_date is null--
|
|
AND ja.session_id = ( SELECT TOP 1 session_id
|
|
FROM msdb.dbo.syssessions
|
|
ORDER BY agent_start_date DESC)
|
|
AND start_execution_date IS NOT NULL
|
|
AND jh.sql_message_id = 7412
|
|
AND msdb.dbo.agent_datetime(run_date, run_time) >= start_execution_date;
|
|
END;
|
|
|
|
/*---------------------- Evoie du mail ------------*/
|
|
IF (@message <> '')
|
|
EXEC aps_Send_Mail_with_template @in_param_varchar_2 = @in_Recipients,
|
|
@in_param_message = @message,
|
|
@in_job_type = 1; /* 0:sans template; 1/NULL:echec; 2:succes; 3:warning; 4:message*/
|
|
|
|
END TRY
|
|
BEGIN CATCH
|
|
|
|
/* Traitement des erreurs (sans RaiseError) */
|
|
EXEC dbo.get_Error_Info @in_RaiseError = 0;
|
|
|
|
END CATCH;
|
|
|
|
/*------------------ Retour au programme appelant -----------------*/
|
|
RETURN (@@error);
|
|
|
|
|
|
GO
|