Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

4 modi per ottenere la cronologia dei processi di SQL Server

In questo articolo, presento quattro opzioni per restituire i dati della cronologia dei processi di SQL Server Agent.

Le Opzioni

Ho incluso due opzioni della GUI e due opzioni T-SQL:

  • Opzione 1 :Usa la GUI di SSMS.
  • Opzione 2 :usa la GUI di Azure Data Studio (tramite l'estensione di SQL Server Agent)
  • Opzione 3 :Esegui sp_help_jobhistory procedura memorizzata.
  • Opzione 4 :Interroga la sysjobhistory table (e unisciti a sysjobs_view visualizza o sysjobs tavolo).

Gli oggetti di SQL Server Agent risiedono in msdb database, quindi le opzioni T-SQL devono essere eseguite in quel database. Puoi farlo passando a msdb prima il database o qualificando l'oggetto in modo appropriato (ad es. msdb.dbo.sysjobhistory ).

Opzione 1:usa la GUI di SSMS

È possibile utilizzare la GUI di SQL Server Management Studio (SSMS) per visualizzare la cronologia dei processi.

Puoi farlo espandendo il nodo di SQL Server Agent in Esplora oggetti, quindi facendo clic con il pulsante destro del mouse su Lavori e selezionando Visualizza cronologia dal menu contestuale:

Si apre una nuova finestra con la cronologia dei lavori di tutti i lavori all'interno del Visualizzatore file di registro:

È possibile visualizzare la cronologia di un singolo lavoro deselezionando gli altri lavori in questa schermata. In alternativa, puoi individuare quel lavoro in Esplora oggetti e fare clic con il pulsante destro del mouse da lì.

Per ulteriori dettagli e schermate, vedere Visualizzazione della cronologia dei processi di SQL Server Agent con SSMS.

Opzione 2:usa la GUI di Azure Data Studio

Se usi Azure Data Studio, potresti non saperlo, ma hai anche la possibilità di visualizzare la cronologia dei processi di SQL Server Agent.

Il modo per farlo è tramite l'estensione di SQL Server Agent.

Ecco come appare:

In questa schermata, esaminiamo la cronologia di un lavoro chiamato BackupKrankyKranesDB .

La cronologia dei lavori è elencata nel riquadro di sinistra. Puoi fare clic su ciascun elemento nel riquadro della cronologia a sinistra per visualizzare i dettagli dell'elemento nel riquadro a destra.

Al momento della stesura di questo articolo, sembra che tu possa visualizzare solo la cronologia di un singolo lavoro alla volta.

Per ulteriori dettagli e schermate, vedere Visualizzazione della cronologia dei processi di SQL Server Agent con Azure Data Studio.

Opzione 3:sp_help_jobhistory Procedura memorizzata

Se preferisci (o hai bisogno) di svolgere le tue attività con T-SQL, allora sp_help_jobhistory stored procedure è un'opzione facile e veloce per te.

Quando chiami sp_help_jobhistory senza alcun argomento, restituisce la cronologia per tutti i lavori. Ma quando passi il nome o l'ID di un lavoro, viene elencata solo la cronologia di quel lavoro.

Ecco un esempio:

EXEC msdb.dbo.sp_help_jobhistory;

Risultato:

Nota che sp_help_jobhistory si trova in msdb database, quindi è necessario assicurarsi di eseguirlo da lì. Puoi farlo sia passando a quel database (ad esempio con USE msdb ), o qualificando la stored procedure con il database e lo schema (ad esempio msdn.dbo.sp_help_jobhistory ).

Puoi ottenere la cronologia di un singolo lavoro passando l'ID o il nome di quel lavoro come argomento.

Esempio:

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB';

Puoi anche usare il @mode parameter per specificare se restituire o meno tutte le colonne nel set di risultati (FULL ) o semplicemente un riepilogo (SUMMARY ).

EXEC msdb.dbo.sp_help_jobhistory
	@job_name = 'BackupKrankyKranesDB',
	@mode = 'FULL';

L'impostazione predefinita è SUMMARY .

Opzione 4:sysjobhistory Tabella

La sysjobhistory table è la tabella che memorizza i dati della cronologia dei lavori.

Come con qualsiasi tabella, puoi semplicemente fare qualcosa del genere:

SELECT * FROM msdb.dbo.sysjobhistory;

Ciò restituirà tutte le colonne della tabella.

Tuttavia, questa tabella non memorizza il nome del lavoro (o la descrizione del lavoro, ecc.). Per ottenere quei dati, dovrai unirti a questa tabella con altre tabelle/viste, come sysjobs_view visualizza o sysjobs tavolo. Ciò fornirà un set di risultati più completo.

Di seguito è riportata una query che puoi utilizzare per restituire dati più completi.

SELECT jv.name AS Job,
		jh.step_name AS Step,
		msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
		STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;

Risultato:

Puoi aggiungere più colonne a SELECT elenco come richiesto.

Se ti stai chiedendo perché questa query utilizza un sacco di cose extra, come AGENT_DATETIME() funzione, il STUFF() funzione, RIGHT() , CAST() e REPLICATE() , è a causa del modo in cui sysjobhistory memorizza i suoi valori di data e ora.

Se non avessi usato quelle funzioni, i valori datetime sarebbero stati meno leggibili.

In particolare, il run_date , run_time e run_duration le colonne memorizzano i propri dati come int valori. Per impostazione predefinita, i dati in queste colonne hanno il seguente aspetto:

Ciò può rendere difficile la lettura per alcuni di noi umani. Soprattutto run_duration colonna. Pertanto, abbiamo utilizzato le varie funzioni nella query precedente per presentare queste colonne in un formato più leggibile.

Potresti notare che la sp_help_jobhistory la procedura memorizzata presenta lo stesso problema.

Inoltre, dovrei menzionare che AGENT_DATE() sembra essere una funzione non documentata.