Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

4 maneiras de obter uma lista de agendamentos no SQL Server Agent (T-SQL)


Neste artigo, apresento quatro opções para usar o T-SQL para retornar as agendas anexadas a um trabalho do SQL Server Agent.

As opções


Você pode usar as seguintes opções de T-SQL para retornar os agendamentos de um trabalho do SQL Server Agent:
  • Opção 1 :Execute o sp_help_job procedimento armazenado.
  • Opção 2 :Execute o sp_help_schedule procedimento armazenado.
  • Opção 3 :Execute o sp_help_jobschedule procedimento armazenado.
  • Opção 4 :Consulte os sysschedules tabela (e junte-a com sysjobschedules e sysjobs_view ).

Todas essas opções residem no msdb banco de dados e, portanto, precisam ser executados nesse banco de dados. Você pode fazer isso alternando para o msdb banco de dados primeiro, ou qualificando o objeto apropriadamente (por exemplo, msdb.dbo.sysschedules ).

Opção 1:o sp_help_job Procedimento armazenado


Quando você chama sp_help_job sem argumentos, ele simplesmente retorna uma lista de trabalhos. Mas quando você passa o nome ou o ID de um trabalho, ele lista os detalhes desse trabalho, incluindo seus agendamentos.

Aqui está um exemplo:
USE msdb;
EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Resultado:

Isso lista o trabalho, bem como todas as etapas do trabalho, agendamentos e servidores de destino. Nesse caso, há dois agendamentos anexados ao trabalho.

Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job 
	@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.

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

Sintaxe


A sintaxe completa de sp_help_job fica assim:
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' ]

Consulte a documentação da Microsoft para sp_help_job para uma explicação de cada parâmetro, bem como os valores que cada um aceita.

Opção 2:o sp_help_schedule Procedimento armazenado


O sp_help_schedule procedimento armazenado é projetado especificamente para retornar agendamentos.

Se você executá-lo sem passar nenhum argumento, ele retornará todos os agendamentos na instância:
EXEC sp_help_schedule;

Para obter informações de um agendamento específico, passe o nome do agendamento ou seu ID:
EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Embora sp_help_schedule não retorna agendamentos para um trabalho específico, você pode usá-lo para retornar apenas os agendamentos anexados a um trabalho.

O @attached_schedules_only parâmetro é bit , com um padrão de 0 , o que significa que ele retorna agendas anexadas e não anexadas. Passando um valor de 1 limita-o apenas a horários anexados.

Exemplo:
EXEC sp_help_schedule
	@attached_schedules_only = 1;

Outra coisa que você pode fazer é usar o @include_description parâmetro para especificar se deve ou não incluir a descrição do agendamento no conjunto de resultados.

Consulte Usando sp_help_schedule no SQL Server para obter mais informações e exemplos.

Opção 3:o sp_help_jobschedule Procedimento armazenado


O sp_help_jobschedule procedimento armazenado retorna informações sobre o agendamento de trabalhos.

Exemplo:
EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Isso retorna uma lista de agendamentos anexados ao trabalho especificado.

Você também pode passar o ID ou o nome de um agendamento para retornar apenas esse agendamento.

Quando você chama sp_help_jobschedule , você deve fornecer o nome do trabalho ou seu ID (mas não ambos) ou o ID do agendamento. Você também pode passar o schedule_name mas apenas em combinação com o ID do trabalho ou seu nome.

A combinação aceita de argumentos é um pouco complicada. Consulte Usando sp_help_jobschedule no SQL Server para obter uma explicação mais detalhada e mais exemplos.

Opção 4:os sysschedules tabela (e outros)


Você pode consultar os sysschedules table e juntá-lo com tabelas como sysjobschedules e sysjobs_view para retornar uma lista de trabalhos e seus agendamentos associados.

Exemplo:
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;

Resultado:

Nesse caso usei inner joins para retornar apenas agendamentos que possuem um job associado e vice-versa.

Você pode alternar para junções à direita para retornar todos os agendamentos, independentemente de estarem anexados a um trabalho, ou junções à esquerda para retornar todos os trabalhos, independentemente de terem um agendamento anexado. Ou você pode usar junções completas para simplesmente retornar tudo.