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

3 modi per restituire un elenco di processi di SQL Server Agent (T-SQL)

Spesso il modo più rapido per ottenere un elenco di processi di SQL Server Agent è semplicemente espandere il nodo di SQL Server Agent in Esplora oggetti SSMS.

Ma non è l'unico modo. E a seconda del tuo ambiente, potrebbe non essere nemmeno un'opzione. Se non disponi di SSMS o di uno strumento di database che ti consenta di visualizzare i processi di SQL Server Agent, potrebbe essere necessario utilizzare invece T-SQL.

In questo articolo, presento tre opzioni per restituire un elenco di processi di SQL Server Agent quando si utilizza T-SQL.

Le Opzioni

È possibile utilizzare le seguenti opzioni per restituire un elenco di processi di SQL Server Agent con T-SQL:

  • Opzione 1 :Esegui il sp_help_job procedura memorizzata.
  • Opzione 2 :interroga sysjobs_view visualizza.
  • Opzione 3 :interroga i sysjobs tavolo direttamente.

Tutte queste opzioni risiedono in msdb database, e quindi devono essere eseguiti in quel database. Puoi farlo passando a msdb prima il database o qualificando l'oggetto in modo appropriato (ad es. msdb.dbo.sysjobs_view ).

Opzione 1:sp_help_job

Quando si utilizza sp_help_job per restituire un elenco di processi di SQL Server Agent, eseguilo semplicemente senza argomenti.

In questo modo:

USE msdb;
EXEC sp_help_job;

In questo caso sono passato a msdb prima il database, il che significava che non avevo bisogno di qualificare completamente la procedura con il nome e lo schema del database.

Ecco come appare quando utilizzo SSMS per eseguirlo nel mio ambiente di test:

Restituisci un lavoro specifico

È possibile utilizzare la stessa procedura memorizzata per restituire i dettagli di uno qualsiasi di questi lavori. Quando lo fai, ottieni molti più dettagli di quelli che ottieni elencando tutti i lavori.

Per ottenere i dettagli del lavoro, devi fornire il nome o l'ID del lavoro.

Ecco un esempio:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Risultato:

Questo elenca il lavoro, così come le fasi del lavoro, le pianificazioni e i server di destinazione.

Ecco un esempio del codice quando si utilizza l'ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Quando si utilizza l'ID, se lo si desidera, è possibile omettere il nome del parametro.

Esempio:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Sintassi

La sintassi completa di sp_help_job va così:

sp_help_job { [ @job_id = ] job_id  
[ @job_name = ] 'job_name' }   
     [ , [ @job_aspect = ] 'job_aspect' ]   
     [ , [ @job_type = ] 'job_type' ]   
     [ , [ @owner_login_name = ] 'login_name' ]   
     [ , [ @subsystem = ] 'subsystem' ]   
     [ , [ @category_name = ] 'category' ]   
     [ , [ @enabled = ] enabled ]   
     [ , [ @execution_status = ] status ]   
     [ , [ @date_comparator = ] 'date_comparison' ]   
     [ , [ @date_created = ] date_created ]   
     [ , [ @date_last_modified = ] date_modified ]   
     [ , [ @description = ] 'description_pattern' ]

Consulta la documentazione di Microsoft per sp_help_job per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.

Opzione 2:sysjobs_view Visualizza

Puoi usare sysjobs_view per restituire un elenco di processi di SQL Server Agent.

Esempio:

SELECT * FROM msdb.dbo.sysjobs_view;

In questo caso ho qualificato il nome della vista con il database e lo schema.

Questa vista restituisce un set di risultati simile (ma leggermente diverso) a sp_help_job stored procedure se utilizzata senza argomenti.

Se desideri dettagli sul lavoro come passaggi, orari e così via, dovrai unirlo ad altre tabelle, come sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , ecc.

Ecco un esempio di unione con sysjobsteps tabella:

SELECT
	jv.name,
	jv.description,
	jv.start_step_id,
	js.step_id,
	js.step_name
FROM msdb.dbo.sysjobs_view jv
LEFT JOIN msdb.dbo.sysjobsteps js
ON jv.job_id = js.job_id;

Ecco il risultato nel mio ambiente di test:

Essendo un join sinistro, include lavori che non hanno passaggi (vedi NULL nel step_id e step_name colonne per il lavoro chiamato TestJob ).

Per limitarlo solo a quei lavori con passaggi, usa un inner join.

Opzione 3:sysjobs Tabella

Ecco un esempio di accesso diretto a sysjobs tabella:

SELECT * FROM msdb.dbo.sysjobs;

Come per la vista, se desideri dettagli sul lavoro come passaggi, pianificazioni e così via, dovrai unirti ad altre tabelle, come sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , ecc.

Di solito si consiglia di interrogare direttamente la vista anziché la tabella.