Quel est un bon outil pour visualiser les travaux de l'Agent SQL? [fermé]


14

Je trouve les outils MS SQL Studio intégrés pour gérer les tâches d'agent un peu frustrants. Quels outils avez-vous trouvés utiles?

D'un côté, il y a trois choses que j'aimerais voir dans un tel outil:

  • Un résumé graphique des tâches exécutées quand, pendant combien de temps et si elles ont réussi.
  • Une vue d'état actuelle, comme le Job Activity Monitor, mais actualisée en temps quasi réel.
  • Une interface plus pratique pour dupliquer ou modifier des travaux (par exemple, comparer deux étapes de travail sans être bloqué par des boîtes de dialogue modales).

Il serait probablement simple d'écrire une petite application pour gérer cela, mais quelqu'un l'a sûrement déjà fait, et l'a fait mieux.

C'est évidemment une question subjective, donc si un mod quelconque sort du passé, n'hésitez pas à en faire un CW.

Réponses:


13

Avez-vous fait des recherches sur Google et voici quelques logiciels qui pourraient vous intéresser:

  1. Gestionnaire de travaux SQL https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. Requête en cours d'exécution des travaux de l'Agent SQL Server http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Si quelqu'un a d'autres liens à ajouter, allez-y!


Pour le point 3, la requête de lien et les notes sont ici -

Aujourd'hui, je suis parti à la recherche d'un moyen de répertorier tous les travaux de l'Agent SQL Server en cours d'exécution. Comme toutes les autres quêtes, celle-ci a également commencé avec Google. :)

En 2 minutes, j'ai trouvé cet excellent article de Brent Ozar sur SQLServerPedia. Pourquoi ce post est-il si génial? C'est tellement bien parce que Brent a pensé que si vous interrogez uniquement les sysjobs et les tables sysjobhistory, vous n'obtiendrez pas le statut actuel exact du travail. C'est-à-dire que dans la table sysjobhistory, vous avez une colonne run_status (même si, selon le BOL, les valeurs possibles pour cette colonne sont «Statut de l'exécution du travail: 0 = Échec, 1 = Réussi, 2 = Réessayer, 3 = Annulé, 4 = En cours ») en réalité, la valeur ne sera jamais 4 (En cours). En fait, dans la table sysjobhistory sont conservées les données historiques de chaque étape de travail exécutée, ce qui signifie que le statut de l'étape n'est mis à jour qu'après l'exécution de l'étape suivante. En d'autres termes, la table n'est PAS mise à jour en temps réel, ni toutes les deux secondes.

Ainsi, Brent a compris qu'il existe une procédure stockée non documentée sys.xp_sqlagent_enum_jobs, qui fait partie de sp_help_job, qui peut donner l'état d'exécution actuel du travail d'agent.

Même si j'ai trouvé un moyen d'obtenir les travaux en cours d'exécution, je n'étais pas satisfait de ce script car il ne fonctionne que sur SQL 2005/2008.

Que dois-je faire si j'ai une instance SQL 2000 et que je suis très curieux de connaître les travaux en cours d'exécution?

Avec un peu d'aide de Tim Chapman (le maître de www.SQLServerNation.com), j'ai compris comment le faire. MERCI, Tim!

Voici le script final, qui s'exécutera sur SQL 2000, 2005 et 2008, et qui vous donnera les travaux d'agent SQL Server en cours d'exécution. (Comme vous pouvez le voir, la différence avec le script de Brent est très petite: au lieu de «sys.xp_sqlagent_enum_jobs» j'utilise «master.dbo.xp_sqlagent_enum_jobs» et je limite le jeu de résultats pour obtenir uniquement les travaux en cours d'exécution en utilisant «où x .running = 1 ″).

C'est aussi simple que cela. Prendre plaisir.

IF EXISTS (SELECT *
FROM    tempdb.dbo.sysobjects
WHERE   id = OBJECT_ID(N'[tempdb].[dbo].[Temp1]')
)
DROP TABLE [tempdb].[dbo].[Temp1]
GO
CREATE TABLE [tempdb].[dbo].[Temp1]
(
job_id uniqueidentifier NOT NULL,
last_run_date nvarchar (20) NOT NULL,
last_run_time nvarchar (20) NOT NULL,
next_run_date nvarchar (20) NOT NULL,
next_run_time nvarchar (20) NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname
COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
DECLARE @job_owner   sysname
DECLARE @is_sysadmin   INT
SET @is_sysadmin   = isnull (is_srvrolemember ('sysadmin'), 0)
SET @job_owner   = suser_sname ()
INSERT INTO [tempdb].[dbo].[Temp1]

--EXECUTE sys.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
UPDATE [tempdb].[dbo].[Temp1]
SET last_run_time    = right ('000000' + last_run_time, 6),
next_run_time    = right ('000000' + next_run_time, 6);
-----
SELECT j.name AS JobName,
j.enabled AS Enabled,
CASE x.running
WHEN 1
THEN
'Running'
ELSE
CASE h.run_status
WHEN 2 THEN 'Inactive'
WHEN 4 THEN 'Inactive'
ELSE 'Completed'
END
END
AS CurrentStatus,
coalesce (x.current_step, 0) AS CurrentStepNbr,
CASE
WHEN x.last_run_date > 0
THEN
convert (datetime,
substring (x.last_run_date, 1, 4)
+ '-'
+ substring (x.last_run_date, 5, 2)
+ '-'
+ substring (x.last_run_date, 7, 2)
+ ' '
+ substring (x.last_run_time, 1, 2)
+ ':'
+ substring (x.last_run_time, 3, 2)
+ ':'
+ substring (x.last_run_time, 5, 2)
+ '.000',
121
)
ELSE
NULL
END
AS LastRunTime,
CASE h.run_status
WHEN 0 THEN 'Fail'
WHEN 1 THEN 'Success'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Cancel'
WHEN 4 THEN 'In progress'
END
AS LastRunOutcome,
CASE
WHEN h.run_duration > 0
THEN
(h.run_duration / 1000000) * (3600 * 24)
+ (h.run_duration / 10000 % 100) * 3600
+ (h.run_duration / 100 % 100) * 60
+ (h.run_duration % 100)
ELSE
NULL
END
AS LastRunDuration
FROM          [tempdb].[dbo].[Temp1] x
LEFT JOIN
msdb.dbo.sysjobs j
ON x.job_id = j.job_id
LEFT OUTER JOIN
msdb.dbo.syscategories c
ON j.category_id = c.category_id
LEFT OUTER JOIN
msdb.dbo.sysjobhistory h
ON     x.job_id = h.job_id
AND x.last_run_date = h.run_date
AND x.last_run_time = h.run_time
AND h.step_id = 0
where x.running = 1

J'ai essayé SQLjobvis; cela me permet de visualiser un peu le calendrier, mais ce n'est pas vraiment mieux que ce que je pourrais faire pour moi-même en une heure. J'aurais placé l'axe du temps verticalement, afin que les utilisateurs puissent facilement faire défiler les jours.
Jon of All Trades

3

Je sais que c'est un poste plus ancien et j'ai personnellement eu le même problème. Gérant plusieurs tâches d'agent SQL sur plusieurs instances, j'ai donc décidé de créer SQL Agent Insight , disponible ici> http://brentec.ca . C'est un produit en évolution et qui sortira de la version bêta dans un proche avenir et il est continuellement mis à jour et les suggestions sont les bienvenues. C'est un projet sur lequel je travaille pendant mon temps libre car je consulte et j'ai aussi un concert à plein temps, mais si les suggestions en valent la peine, elles sont mises dans la trémie pour l'avenir.

Actuellement, ce n'est qu'un outil de surveillance pour l'agent SQL, avec une certaine capacité de script. Se trouve actuellement à la version 0.11 avec 2-3 mises à jour par an et ont des informations de contact pour une assistance. Oui, en ce moment, il n'y a pas d'aide en ligne, mais comme il s'agit à peu près d'un produit en lecture seule, aucun dommage ne peut être causé à l'instance surveillée de SQL.


2

Avez-vous essayé la fonctionnalité de rapports?

Clic droit sur SQL Agent => Rapports => rapports standard


Je ne l'avais pas fait, mais ils ne sont pas très utiles. Il y en a deux, et ils indiquent simplement le nombre d'exécutions et le temps d'exécution moyen.
Jon of All Trades

Pour être clair, je n'exclus pas les rapports SQL Studio, si quelqu'un a un rapport utile qu'il aimerait partager.
Jon of All Trades


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.