Qual è un buon strumento per visualizzare i lavori di SQL Agent? [chiuso]


14

Trovo che gli strumenti integrati di MS SQL Studio per la gestione dei lavori dell'agente siano un po 'frustranti. Quali strumenti hai trovato utili?

Di mano, ci sono tre cose che mi piacerebbe vedere in un simile strumento:

  • Un riepilogo grafico di quali lavori sono stati eseguiti quando, per quanto tempo e se hanno avuto successo.
  • Una vista di stato corrente, come Job Activity Monitor, ma aggiornata in tempo quasi reale.
  • Un'interfaccia più comoda per duplicare o modificare lavori (ad esempio, confrontare due passaggi di lavoro senza essere bloccato da finestre di dialogo modali).

Probabilmente sarebbe semplice scrivere una piccola app per gestirlo, ma sicuramente qualcuno l'ha già fatto e lo ha fatto meglio.

Questa è ovviamente una domanda soggettiva, quindi se un mod di qualche tipo vaga nel passato, sentiti libero di renderlo un CW.

Risposte:


13

Hai cercato su Google e qui ci sono alcuni software che potrebbero interessarti:

  1. SQL Job Manager https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. Query che esegue attualmente i processi di SQL Server Agent http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

Se qualcuno ha più link da aggiungere, vai avanti!


Per il punto 3, la query di collegamento e le note sono qui -

Oggi sono andato alla ricerca di un modo per elencare tutti i lavori di SQL Server Agent attualmente in esecuzione. Come ogni altra ricerca, anche questa è iniziata con Google-ing. :)

In 2 minuti ho trovato questo fantastico post di Brent Ozar su SQL Server Server. Perché questo post è così bello? È fantastico perché Brent ha pensato che se si interrogano solo le tabelle sysjobs e sysjobhistory non si otterrà lo stato attuale del lavoro. Vale a dire nella tabella sysjobhistory hai una colonna run_status, tuttavia (anche se secondo BOL i valori possibili per questa colonna sono “Stato dell'esecuzione del lavoro: 0 = Fallito, 1 = Riuscito, 2 = Riprova, 3 = Annullato, 4 = In corso ”) in realtà, il valore non sarà mai 4 (In corso). In realtà, nella tabella sysjobhistory vengono mantenuti i dati storici di ogni passaggio del processo eseguito, il che significa che lo stato del passaggio viene aggiornato solo dopo l'esecuzione del passaggio successivo. In altre parole, la tabella NON viene aggiornata in tempo reale, né ogni altro secondo.

Quindi, Brent ha scoperto che esiste una procedura memorizzata non documentata sys.xp_sqlagent_enum_jobs, che fa parte di sp_help_job, che può fornire lo stato di esecuzione corrente del processo agente.

Anche se ho trovato un modo per ottenere i lavori attualmente in esecuzione, non ero contento di questo script perché funziona solo su SQL 2005/2008.

Cosa devo fare se ho un'istanza di SQL 2000 e sono molto curioso dei lavori attualmente in esecuzione?

Con un po 'dell'aiuto di Tim Chapman (il maestro di www.SQLServerNation.com) ho capito come farlo. GRAZIE, Tim!

Ecco lo script finale, che verrà eseguito su SQL 2000, 2005 e 2008 e che fornirà i processi agente SQL Server attualmente in esecuzione. (Come puoi vedere, la differenza con lo script di Brent è molto piccola: invece di "sys.xp_sqlagent_enum_jobs" sto usando "master.dbo.xp_sqlagent_enum_jobs" e sto limitando il set di risultati per ottenere solo i lavori attualmente in esecuzione usando "dove x .running = 1 ″).

Così com'è. Godere.

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

Ho provato SQLjobvis; mi permette di visualizzare un po 'il programma, ma non è davvero meglio di quello che potrei fare da solo in un'ora. Avrei messo l'asse del tempo in verticale, in modo che gli utenti potessero scorrere facilmente i giorni.
Jon of All Trades,

3

So che questo è un post più vecchio e ho avuto personalmente lo stesso problema. Gestione di più processi agente SQL su più istanze, quindi ho deciso di creare SQL Agent Insight , disponibile qui> http://brentec.ca . È un prodotto in evoluzione e uscirà dalla beta nel prossimo futuro e viene continuamente aggiornato e i suggerimenti sono benvenuti. Questo è un progetto a cui lavoro durante il mio tempo libero mentre consulto e ho anche un concerto a tempo pieno, ma se i suggerimenti valgono la pena, vengono messi nella tramoggia per il futuro.

Attualmente è solo uno strumento di monitoraggio per l'agente SQL, con alcune capacità di scripting. Attualmente si trova alla versione 0.11 con 2-3 aggiornamenti all'anno e dispone di informazioni di contatto per assistenza. Sì, al momento non esiste alcun aiuto in linea, ma poiché è praticamente un prodotto di sola lettura, non è possibile danneggiare l'istanza monitorata di SQL.


2

Hai provato la funzione rapporti?

Fare clic con il tasto destro su Agente SQL => Rapporti => rapporti standard


Non l'ho fatto, ma non sono terribilmente utili. Ce ne sono due e mostrano solo il numero di esecuzioni e il tempo medio di esecuzione.
Jon of All Trades,

Per essere chiari, non escludo i report di SQL Studio, se qualcuno ha un report utile che vorrebbe condividere.
Jon of All Trades


2

Un altro da aggiungere all'elenco:

Una cosa che mi piace di questo è che si integra con altri componenti come Windows Scheduler e le attività Oracle.

Grazie a Mark per averlo sollevato quando ho chiesto a The Heap.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.