Voici une petite procédure stockée utilitaire qui retourne 1 si le job est en cours d’exécution, et 0 à l’inverse …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | --------------------------------- -- Nicolas SOUQUET - 18/05/2009 - --------------------------------- CREATE PROCEDURE [dbo].[PsIsJobRunning] @nomJob SYSNAME AS BEGIN -- Récupère l'identifiant du job DECLARE @job_id UNIQUEIDENTIFIER, @isRunning BIT = 0 SELECT @job_id = job_id FROM msdb.dbo.sysjobs WHERE name = @_szNomJob DECLARE @Enum_Jobs TABLE ( JobID UNIQUEIDENTIFIER, LastRunDate INT, LatRunTime INT, NextRunDate INT, NextRunTime INT, NextRunScheduleID INT, RequestedToRun INT, RequesteSource INT, RequesteSourceID NVARCHAR(100), Running INT, CurrentStep INT, CurrentRetryAttempt INT, State INT ) INSERT INTO @Enum_Jobs EXECUTE master.dbo.xp_sqlagent_enum_jobs 1, 'sa', @job_id SELECT @isRunning = ISNULL(CAST(Running AS BIT), 0) FROM @Enum_Jobs RETURN @isRunning END |
Notons que la colonne « Running » retournée par la procédure stockée étendue (et non-documentée) xp_sqlagent_enum_job peut prendre les valeurs suivantes :
0 = arrêté ou suspendu,
1 = en cours d’exécution,
2 = en attente d’un thread,
3 = réessai,
4 = arrêté,
5 = suspendu,
6 = en attente de terminaison d’étape,
7 = exécutions des actions d’achèvement
Vous remarquerez que j’aurai du vous proposer un code prenant en compte le statut d’identifiant 4, mais lorsqu’on requête pour un job arrêté, c’est bien le statut d’identiant 1 qui est retourné …
ElSuket