sql >> Database >  >> RDS >> Sqlserver

4 manieren om de taakgeschiedenis van SQL Server op te halen

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 de sysjobs_view weergave of de sysjobs 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.


  1. Getallen opmaken met komma's in SQL Server

  2. SQL Server kapt varchar's stil af in opgeslagen procedures

  3. Een kolomtype wijzigen in langere strings in rails

  4. regexp_substr slaat lege posities over