# 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:
```sql
-- 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
-- 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
```sql
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)
- 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:
```sql
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;
```

2) 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.:
```sql
-- 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;
```

3) Ü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.

4) 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.

5) Während der Laufzeit „live“ Ausgaben erzwingen
- In T‑SQL Steps hilft z. B.:
```sql
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:
```sql
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.