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

4 modi per ottenere un elenco di pianificazioni in SQL Server Agent (T-SQL)

In questo articolo, presento quattro opzioni per l'utilizzo di T-SQL per restituire le pianificazioni allegate a un processo di SQL Server Agent.

Le Opzioni

È possibile utilizzare le seguenti opzioni T-SQL per restituire le pianificazioni di un processo di SQL Server Agent:

  • Opzione 1 :Esegui il sp_help_job procedura memorizzata.
  • Opzione 2 :Esegui sp_help_schedule procedura memorizzata.
  • Opzione 3 :Esegui sp_help_jobschedule procedura memorizzata.
  • Opzione 4 :Interroga i sysschedules table (e unisciti a sysjobschedules e sysjobs_view ).

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.sysschedules ).

Opzione 1:sp_help_job Procedura memorizzata

Quando chiami sp_help_job senza alcun argomento, restituisce semplicemente un elenco di lavori. Ma quando trasmetti il ​​nome o l'ID di un lavoro, vengono elencati i dettagli per quel lavoro, comprese le sue pianificazioni.

Ecco un esempio:

USE msdb;
EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Risultato:

Questo elenca il lavoro, così come tutti i passaggi del lavoro, le pianificazioni e i server di destinazione. In questo caso, ci sono due pianificazioni allegate al lavoro.

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

EXEC sp_help_job 
	@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

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

Esempio:

EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

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:sp_help_schedule Procedura memorizzata

Il sp_help_schedule la procedura memorizzata è progettata specificamente per restituire le pianificazioni.

Se lo esegui senza passare alcun argomento, restituirà tutte le pianificazioni nell'istanza:

EXEC sp_help_schedule;

Per ottenere informazioni su una pianificazione specifica, passa il nome della pianificazione o il suo ID:

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Sebbene sp_help_schedule non restituisce le pianificazioni per un lavoro specifico, puoi utilizzarlo per restituire solo le pianificazioni allegate a un lavoro.

Il @attached_schedules_only il parametro è bit , con un valore predefinito di 0 , il che significa che restituisce sia le pianificazioni allegate che non allegate. Passaggio di un valore di 1 lo limita solo agli orari allegati.

Esempio:

EXEC sp_help_schedule
	@attached_schedules_only = 1;

Un'altra cosa che puoi fare è usare il @include_description parametro per specificare se includere o meno la descrizione della pianificazione nel set di risultati.

Vedere Utilizzo di sp_help_schedule in SQL Server per ulteriori informazioni ed esempi.

Opzione 3:sp_help_jobschedule Procedura memorizzata

Il sp_help_jobschedule stored procedure restituisce informazioni sulla pianificazione dei lavori.

Esempio:

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Questo restituisce un elenco di pianificazioni allegate al lavoro specificato.

Puoi anche trasmettere l'ID o il nome di una pianificazione per restituire solo quella pianificazione.

Quando chiami sp_help_jobschedule , è necessario fornire il nome del lavoro o il relativo ID (ma non entrambi) o l'ID pianificazione. Puoi anche passare il schedule_name ma solo in combinazione con l'ID lavoro o il suo nome.

La combinazione accettata di argomenti è un po' complicata. Vedere Utilizzo di sp_help_jobschedule in SQL Server per una spiegazione più dettagliata e altri esempi.

Opzione 4:sysschedules tabella (e altri)

Puoi interrogare i sysschedules table e unisciti a tabelle come sysjobschedules e sysjobs_view per restituire un elenco di lavori e le relative pianificazioni.

Esempio:

SELECT
	jv.name,
	jv.description,
	s.schedule_id,
	s.name,
	s.freq_type,
	s.freq_interval,
	s.freq_subday_type,
	s.freq_subday_interval,
	js.next_run_date,
	js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;

Risultato:

In questo caso ho usato inner join per restituire solo le pianificazioni che hanno un lavoro associato e viceversa.

Puoi passare ai join di destra per restituire tutte le pianificazioni, indipendentemente dal fatto che siano allegate a un lavoro, o ai join di sinistra per restituire tutti i lavori, indipendentemente dal fatto che abbiano una pianificazione allegata. Oppure potresti utilizzare i full join per restituire semplicemente tutto.