In dit artikel presenteer ik vier opties voor het retourneren van taakgeschiedenisgegevens van SQL Server Agent.
De opties
Ik heb twee GUI-opties en twee T-SQL-opties toegevoegd:
- Optie 1 :Gebruik de SSMS GUI.
- Optie 2 :Gebruik de Azure Data Studio GUI (via de SQL Server Agent-extensie)
- Optie 3 :Voer de
sp_help_jobhistory
. uit opgeslagen procedure. - Optie 4 :Zoek in de
sysjobhistory
tabel (en voeg deze samen met desysjobs_view
weergave of desysjobs
tafel).
De SQL Server Agent-objecten bevinden zich in de msdb database, en dus moeten de T-SQL-opties in die database worden uitgevoerd. U kunt dat doen door over te schakelen naar de msdb database eerst, of door het object op de juiste manier te kwalificeren (bijv. msdb.dbo.sysjobhistory
).
Optie 1:Gebruik de SSMS GUI
U kunt de GUI van SQL Server Management Studio (SSMS) gebruiken om de taakgeschiedenis te bekijken.
U kunt dit doen door het SQL Server Agent-knooppunt in de Objectverkenner uit te vouwen en vervolgens met de rechtermuisknop te klikken op Taken en selecteer Geschiedenis bekijken vanuit het contextmenu:
Dit opent een nieuw venster met de taakgeschiedenis van alle taken in de Logbestandviewer:
U kunt de geschiedenis van een enkele taak bekijken door de andere taken in dit scherm uit te schakelen. Als alternatief kunt u die taak in de Objectverkenner zoeken en er vanaf daar met de rechtermuisknop op klikken.
Zie Taakgeschiedenis van SQL Server Agent weergeven met SSMS voor meer details en schermafbeeldingen.
Optie 2:Gebruik de Azure Data Studio GUI
Als je Azure Data Studio gebruikt, weet je het misschien niet, maar je hebt ook de mogelijkheid om de taakgeschiedenis van SQL Server Agent te bekijken.
De manier om dit te doen is via de SQL Server Agent-extensie.
Zo ziet dat eruit:
In dit scherm kijken we naar de geschiedenis voor een taak genaamd BackupKrankyKranesDB .
De taakgeschiedenis wordt weergegeven in het linkerdeelvenster. U kunt op elk item in het linkerdeelvenster met geschiedenis klikken om de details van dat item in het rechterdeelvenster weer te geven.
Op het moment van schrijven lijkt het erop dat u de geschiedenis van één taak tegelijk kunt bekijken.
Zie Taakgeschiedenis van SQL Server Agent weergeven met Azure Data Studio voor meer details en schermafbeeldingen.
Optie 3:De sp_help_jobhistory
Opgeslagen procedure
Als u uw taken liever met T-SQL wilt (of moet) doen, dan is de sp_help_jobhistory
opgeslagen procedure is een snelle en gemakkelijke optie voor u.
Wanneer u sp_help_jobhistory
. aanroept zonder argumenten retourneert het de geschiedenis voor alle taken. Maar wanneer u de naam of ID van een taak doorgeeft, wordt alleen de geschiedenis van die ene taak weergegeven.
Hier is een voorbeeld:
EXEC msdb.dbo.sp_help_jobhistory;
Resultaat:
Merk op dat sp_help_jobhistory
bevindt zich in de msdb database, dus u moet ervoor zorgen dat u het vanaf daar uitvoert. U kunt dit doen door naar die database over te schakelen (bijv. met USE msdb
), of door de opgeslagen procedure te kwalificeren met de database en het schema (d.w.z. msdn.dbo.sp_help_jobhistory
).
U kunt de geschiedenis van een enkele taak krijgen door de ID of naam van die taak als argument door te geven.
Voorbeeld:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
U kunt ook de @mode parameter
. gebruiken om aan te geven of alle kolommen in de resultatenset moeten worden geretourneerd (FULL
), of alleen een samenvatting (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
De standaard is SUMMARY
.
Optie 4:De sysjobhistory
Tabel
De sysjobhistory
tabel is de tabel waarin taakgeschiedenisgegevens worden opgeslagen.
Zoals bij elke tafel, kun je gewoon zoiets als dit doen:
SELECT * FROM msdb.dbo.sysjobhistory;
Dat retourneert alle kolommen in de tabel.
Deze tabel slaat echter niet de naam van de taak op (of de beschrijving van de taak, enz.). Om die gegevens te krijgen, moet u deze tabel samenvoegen met andere tabellen/views, zoals de sysjobs_view
weergave of de sysjobs
tafel. Dat levert een completere resultatenset op.
Hieronder vindt u een query die u kunt gebruiken om meer volledige gegevens te retourneren.
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;
Resultaat:
U kunt meer kolommen toevoegen aan de SELECT
lijst zoals vereist.
Als je je afvraagt waarom deze zoekopdracht een heleboel extra dingen gebruikt, zoals de AGENT_DATETIME()
functie, de STUFF()
functie, RIGHT()
, CAST()
, en REPLICATE()
, het komt door de manier waarop sysjobhistory
slaat zijn datetime-waarden op.
Als ik die functies niet had gebruikt, zouden de datetime-waarden minder leesbaar zijn geweest.
In het bijzonder de run_date
, run_time
en run_duration
kolommen slaan hun gegevens op als int waarden. Standaard zien de gegevens in die kolommen er als volgt uit:
Dat kan het voor sommigen van ons mensen moeilijk maken om te lezen. Vooral de run_duration
kolom. Daarom hebben we de verschillende functies in de bovenstaande query gebruikt om deze kolommen in een meer voor mensen leesbare indeling te presenteren.
Het is je misschien opgevallen dat de sp_help_jobhistory
opgeslagen procedure heeft hetzelfde probleem.
Ik moet ook vermelden dat AGENT_DATE()
lijkt een ongedocumenteerde functie te zijn.