SQL Server Logs
Kurzantwort
- Vollständige Logs findest du als Dateien im MSSQL-Logverzeichnis:
- SQL Server: ERRORLOG, ERRORLOG.1, …
- SQL Server Agent: SQLAGENT.OUT, SQLAGENT.1, …
- Die „Job-Historie“ im Agent-Fenster wird auf ca. 4.000 Zeichen pro Schritt gekürzt. Für die komplette Ausgabe leite die Steps in eine Datei oder Tabelle um (siehe unten).
Wo liegen die Log-Dateien?
- Windows (Standardpfad, kann abweichen):
C:\Program Files\Microsoft SQL Server\MSSQLXX.<Instanz>\MSSQL\Log\
Dateien: ERRORLOG, ERRORLOG.1 … und SQLAGENT.OUT, SQLAGENT.1 … - Linux:
/var/opt/mssql/log/errorlog
/var/opt/mssql/log/sqlagent.out
Per T‑SQL den aktuellen Pfad ermitteln:
-- voller Pfad zur aktuellen ERRORLOG-Datei
SELECT SERVERPROPERTY('ErrorLogFileName') AS ErrorLogFile;
In SSMS:
- Management > SQL Server-Protokolle (Error Logs)
- SQL Server-Agent > Fehlerprotokolle (Agent Error Logs)
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
- In eine Datei loggen (empfohlen)
- Job > Schritt > Erweitert (Advanced) > „Ausgabe in Datei“
- Optional: „Ausgabe an vorhandene Datei anhängen“ aktivieren
- Du kannst Tokens für dynamische Namen verwenden:
E:\SQLAgentLogs\$(JOBNAME)_Step$(STEPID)_$(DATE)_$(TIME).txt
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;
- In Tabelle loggen (für lange Ausgaben)
- Job > Schritt > Erweitert > „In Tabelle protokollieren“ aktivieren
- Optional „An vorhandene Protokolle anhängen“ aktivieren
- Danach kannst du die Logs in msdb abfragen, z. B.:
-- 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;
- Über sqlcmd/powershell ausführen und Output umleiten
- SQLCMD:
sqlcmd -S <Server> -E -i script.sql -o "E:\SQLAgentLogs\script_output.txt" - Den Agent-Step als „Betriebssystem (CmdExec)“-Schritt konfigurieren und so die komplette Ausgabe erfassen.
- Job-Historie-Einstellungen anpassen
- SQL Server-Agent > Eigenschaften > Verlauf: Anzahl Einträge erhöhen, aber beachte: das hebt die 4.000‑Zeichen‑Grenze pro Step nicht auf.
- Während der Laufzeit „live“ Ausgaben erzwingen
- In T‑SQL Steps hilft z. B.:
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
- Die vollständigen Server-/Agent-Logs sind als Dateien im MSSQL-Logordner (ERRORLOG, SQLAGENT.OUT).
- Die Anzeige im Agent-Fenster ist der Natur nach gekürzt.
- Für komplette Jobausgaben: „Ausgabe in Datei“ oder „In Tabelle protokollieren“ am Step aktivieren.
- Bei Bedarf per xp_readerrorlog oder direkt in SSMS die Error-/Agent-Logs ansehen.
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.