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

4 måder at få en liste over tidsplaner i SQL Server Agent (T-SQL)

I denne artikel præsenterer jeg fire muligheder for at bruge T-SQL til at returnere de tidsplaner, der er knyttet til et SQL Server Agent-job.

Indstillingerne

Du kan bruge følgende T-SQL-indstillinger til at returnere tidsplanerne for et SQL Server Agent-job:

  • Mulighed 1 :Udfør sp_help_job gemt procedure.
  • Mulighed 2 :Udfør sp_help_schedule gemt procedure.
  • Mulighed 3 :Udfør sp_help_jobschedule gemt procedure.
  • Mulighed 4 :Forespørg sysschedules tabel (og sammenføj den med sysjobschedules og sysjobs_view ).

Alle disse muligheder findes i msdb database, og skal derfor køres i denne database. Du kan gøre det ved at skifte til msdb database først, eller ved at kvalificere objektet korrekt (f.eks. msdb.dbo.sysschedules ).

Mulighed 1:sp_help_job Lagret procedure

Når du ringer til sp_help_job uden nogen argumenter returnerer den blot en liste over job. Men når du videregiver navnet eller id'et på et job, viser det detaljerne for det pågældende job, inklusive dets tidsplaner.

Her er et eksempel:

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

Resultat:

Dette viser jobbet samt alle jobtrin, tidsplaner og målservere. I dette tilfælde er der to tidsplaner knyttet til jobbet.

Her er et eksempel på koden, når du bruger ID'et:

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

Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.

Eksempel:

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

Syntaks

Den fulde syntaks for sp_help_job går sådan her:

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' ]

Se Microsofts dokumentation for sp_help_job for en forklaring af hver parameter, samt de værdier, som hver accepterer.

Mulighed 2:sp_help_schedule Lagret procedure

sp_help_schedule lagret procedure er designet specifikt til at returnere tidsplaner.

Hvis du udfører det uden at sende nogen argumenter, vil det returnere alle tidsplaner i instansen:

EXEC sp_help_schedule;

For at få oplysninger om en bestemt tidsplan skal du sende enten tidsplanens navn eller dens ID:

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Selvom sp_help_schedule returnerer ikke tidsplaner for et bestemt job, kan du bruge det til kun at returnere de tidsplaner, der er knyttet til et job.

@attached_schedules_only parameter er bit , med en standard på 0 , hvilket betyder, at den returnerer både vedhæftede og ikke-tilknyttede tidsplaner. Sender værdien 1 begrænser det til kun vedhæftede tidsplaner.

Eksempel:

EXEC sp_help_schedule
	@attached_schedules_only = 1;

En anden ting du kan gøre er at bruge @include_description parameter for at angive, om tidsplanens beskrivelse skal inkluderes i resultatsættet.

Se Brug af sp_help_schedule i SQL Server for mere information og eksempler.

Mulighed 3:sp_help_jobschedule Lagret procedure

sp_help_jobschedule lagret procedure returnerer information om planlægning af job.

Eksempel:

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Dette returnerer en liste over tidsplaner, der er knyttet til det angivne job.

Du kan også sende en tidsplans ID eller navn for at returnere netop den tidsplan.

Når du ringer til sp_help_jobschedule , skal du angive enten jobnavnet eller dets id (men ikke begge dele) eller tidsplan-id'et. Du kan også videregive schedule_name men kun i kombination med job-id'et eller dets navn.

Den accepterede kombination af argumenter er lidt tricky. Se Brug af sp_help_jobschedule i SQL Server for en mere detaljeret forklaring og flere eksempler.

Mulighed 4:sysschedules tabel (og andre)

Du kan forespørge på sysschedules tabel og sammenføj den med tabeller såsom sysjobschedules og sysjobs_view for at returnere en liste over job og deres tilknyttede tidsplaner.

Eksempel:

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;

Resultat:

I dette tilfælde brugte jeg indre sammenføjninger til kun at returnere tidsplaner, der har et tilknyttet job og omvendt.

Du kan skifte til højresammenføjninger for at returnere alle tidsplaner, uanset om de er knyttet til et job, eller venstresammenføjninger for at returnere alle job, uanset om de har en tilknyttet tidsplan. Eller du kan bruge fulde joinforbindelser til simpelthen at returnere alt.


  1. Kan ikke logge på databasen som SYS med Oracle SQL Developer

  2. Sådan får du den aktuelle dato og tid (uden tidszone) i PostgreSQL

  3. Sjove tweets om en DBA's liv

  4. Sådan ændres brugeradgangskode i PostgreSQL