I denne artikel præsenterer jeg fire muligheder for at returnere SQL Server Agent-jobhistorikdata.
Indstillingerne
Jeg har inkluderet to GUI-muligheder og to T-SQL-muligheder:
- Mulighed 1 :Brug SSMS GUI.
- Mulighed 2 :Brug Azure Data Studio GUI (via SQL Server Agent-udvidelsen)
- Mulighed 3 :Udfør
sp_help_jobhistory
gemt procedure. - Mulighed 4 :Forespørg på
sysjobhistory
tabel (og sammenføj den medsysjobs_view
visning ellersysjobs
bord).
SQL Server Agent-objekterne findes i msdb database, og derfor skal T-SQL-indstillingerne køres i den database. Du kan gøre det ved at skifte til msdb database først, eller ved at kvalificere objektet korrekt (f.eks. msdb.dbo.sysjobhistory
).
Mulighed 1:Brug SSMS GUI
Du kan bruge SQL Server Management Studio (SSMS) GUI til at se jobhistorik.
Du kan gøre dette ved at udvide SQL Server Agent-noden i Object Explorer og derefter højreklikke på Jobs og vælg Se historik fra kontekstmenuen:
Dette åbner et nyt vindue med jobhistorikken for alle job inde i Log File Viewer:
Du kan se historikken for et enkelt job ved at fravælge de andre job på denne skærm. Alternativt kan du finde jobbet i Objekt Explorer og højreklikke på det derfra.
Se Se Vis SQL Server Agent-jobhistorik med SSMS for flere detaljer og skærmbilleder.
Mulighed 2:Brug Azure Data Studio GUI
Hvis du bruger Azure Data Studio, ved du det måske ikke, men du har også mulighed for at se SQL Server Agent-jobhistorik.
Måden at gøre dette på er via SQL Server Agent-udvidelsen.
Sådan ser det ud:
På denne skærm ser vi på historikken for et job kaldet BackupKrankyKranesDB .
Jobhistorikken er vist i venstre rude. Du kan klikke på hvert element i venstre historikrude for at få vist det pågældende elements detaljer i højre rude.
Når dette skrives, ser det ud til, at du kun kan se historikken for et enkelt job ad gangen.
Se Se Vis SQL Server Agent-jobhistorik med Azure Data Studio for flere detaljer og skærmbilleder.
Mulighed 3:sp_help_jobhistory
Lagret procedure
Hvis du foretrækker (eller har brug for) at udføre dine opgaver med T-SQL, så sp_help_jobhistory
lagret procedure er en hurtig og nem mulighed for dig.
Når du ringer til sp_help_jobhistory
uden nogen argumenter, returnerer det historien for alle job. Men når du videregiver navnet eller ID'et på et job, viser det kun historikken for det ene job.
Her er et eksempel:
EXEC msdb.dbo.sp_help_jobhistory;
Resultat:
Bemærk, at sp_help_jobhistory
er placeret i msdb database, så du skal sikre dig, at du kører den derfra. Du kan gøre dette enten ved at skifte til den database (f.eks. med USE msdb
), eller ved at kvalificere den lagrede procedure med databasen og skemaet (dvs. msdn.dbo.sp_help_jobhistory
).
Du kan få historikken for et enkelt job ved at videregive jobbets ID eller navn som et argument.
Eksempel:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Du kan også bruge parameteren @mode parameter
for at angive, om alle kolonner i resultatsættet skal returneres (FULL
), eller bare et resumé (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
Standarden er SUMMARY
.
Mulighed 4:sysjobhistory
Tabel
sysjobhistory
tabel er den tabel, der gemmer jobhistorikdata.
Som med enhver tabel kan du blot gøre sådan noget:
SELECT * FROM msdb.dbo.sysjobhistory;
Det vil returnere alle kolonner i tabellen.
Denne tabel gemmer dog ikke jobnavnet (eller jobbets beskrivelse osv.). For at få disse data skal du forbinde denne tabel med andre tabeller/visninger, såsom sysjobs_view
visning eller sysjobs
bord. Det vil give et mere komplet resultatsæt.
Nedenfor er en forespørgsel, som du kan bruge til at returnere mere fuldstændige data.
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;
Resultat:
Du kan tilføje flere kolonner til SELECT
liste efter behov.
Hvis du undrer dig over, hvorfor denne forespørgsel bruger en hel masse ekstra ting, såsom AGENT_DATETIME()
funktionen, STUFF()
funktion, RIGHT()
, CAST()
, og REPLICATE()
, det er på grund af måden sysjobhistory
på gemmer sine datetime-værdier.
Hvis jeg ikke havde brugt disse funktioner, ville datetime-værdierne have været mindre læsbare.
Især run_date
, run_time
og run_duration
kolonner gemmer deres data som int værdier. Som standard ser dataene i disse kolonner sådan ud:
Det kan gøre det svært for nogle af os mennesker at læse. Især run_duration
kolonne. Derfor brugte vi de forskellige funktioner i ovenstående forespørgsel til at præsentere disse kolonner i et mere menneskeligt læsbart format.
Du bemærker måske, at sp_help_jobhistory
lagret procedure lider af det samme problem.
Jeg bør også nævne at AGENT_DATE()
ser ud til at være en udokumenteret funktion.