SQL Server Logs

Kurzantwort


Wo liegen die Log-Dateien?

Per T‑SQL den aktuellen Pfad ermitteln:

-- voller Pfad zur aktuellen ERRORLOG-Datei
SELECT SERVERPROPERTY('ErrorLogFileName') AS ErrorLogFile;

In SSMS:

Per T‑SQL lesen:

-- SQL Server Errorlog (aktuelles Log)
EXEC xp_readerrorlog 0, 1;  -- 1 = SQL Server

-- SQL Agent Log (aktuelles Log)
EXEC xp_readerrorlog 0, 2;  -- 2 = SQL Agent

-- optional Filter & Zeitraum
EXEC xp_readerrorlog
    0, 2, 'Failed', NULL, '2025-11-01', '2025-11-10', 'DESC';

Tipp: Mit

EXEC sp_cycle_errorlog;

kannst du das Errorlog rotieren (z. B. täglich per Job).


Warum ist die Ausgabe im Agent-Fenster abgeschnitten?

Die Job-Historie (msdb..sysjobhistory) speichert die Step-Meldungen nur bis ca. 4.000 Zeichen. SSMS zeigt daher oft nur den Anfang. Das ist der Grund, warum du im Agent-Fenster keine vollständige Ausgabe siehst.


So bekommst du die vollständige Job-Ausgabe

  1. In eine Datei loggen (empfohlen)

Per T‑SQL setzen:

EXEC msdb.dbo.sp_update_jobstep
  @job_name = N'Mein Job',
  @step_id = 1,
  @output_file_name = N'E:\SQLAgentLogs\$(JOBNAME)_Step$(STEPID)_$(DATE)_$(TIME).txt',
  @append_output = 1;
  1. In Tabelle loggen (für lange Ausgaben)
-- Schritt-Logs (wenn "In Tabelle protokollieren" aktiviert war)
SELECT TOP (100)
       j.name,
       l.step_id,
       l.log_date,
       l.log -- i. d. R. NVARCHAR(MAX)
FROM msdb.dbo.sysjobstepslogs AS l
JOIN msdb.dbo.sysjobs AS j ON j.job_id = l.job_id
ORDER BY l.log_date DESC;
  1. Über sqlcmd/powershell ausführen und Output umleiten
  1. Job-Historie-Einstellungen anpassen
  1. Während der Laufzeit „live“ Ausgaben erzwingen
RAISERROR('Zwischenstand ...', 0, 1) WITH NOWAIT;

So siehst du Fortschritt früher; für die Vollständigkeit nutze trotzdem eine Datei/Tabelle.


Nützliche Abfragen rund um Agent-Jobs

Letzte Jobläufe mit (ggf. abgeschnittenen) Meldungen:

SELECT TOP (50)
       j.name,
       h.step_id,
       h.run_date, h.run_time,
       h.run_duration,
       h.run_status,   -- 0=Fehler, 1=Erfolg, 2=Abgebrochen, 3=Abgebrochen vom Benutzer, 4=Retry
       h.message
FROM msdb.dbo.sysjobhistory AS h
JOIN msdb.dbo.sysjobs AS j ON j.job_id = h.job_id
WHERE h.step_id > 0
ORDER BY h.instance_id DESC;

Zusammenfassung

Wenn du magst, sag mir deine SQL Server-Version und ob du Windows oder Linux nutzt, dann gebe ich dir eine exakt passende Schritt-für-Schritt-Anleitung.


Revision #1
Created 10 November 2025 08:09:07 by Stefan Mechler
Updated 10 November 2025 08:09:38 by Stefan Mechler