Wenn Jobs/“>Jobs nicht tun, was sie sollen
SQL Agent Jobs sind praktisch.
Sie sichern, verschieben, berechnen, löschen.
Aber wenn einer hĂ€ngt oder fehlschlĂ€gt, fĂ€llt’s oft erst Tage spĂ€ter auf.
Du brauchst ein Auge drauf.
Und wenn was schiefgeht: eine saubere Analyse.
Sonst bleibt der Fehler zyklisch.
Schritt 1: Fehlerhafte Jobs erkennen
SELECT
j.name AS job_name,
h.run_date,
h.run_time,
h.run_duration,
h.message
FROM msdb.dbo.sysjobhistory h
JOIN msdb.dbo.sysjobs j ON h.job_id = j.job_id
WHERE h.run_status = 0 -- 0 = Fehler
AND h.step_id > 0
ORDER BY h.run_date DESC, h.run_time DESC;
Damit siehst Du, welcher Step wann versagt hat.
Die Spalte message zeigt den konkreten Fehler.
Schritt 2: Letzten Status aller Jobs prĂŒfen
SELECT
j.name,
js.last_run_outcome,
js.last_run_date,
js.last_run_time,
js.last_outcome_message
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobServers js ON j.job_id = js.job_id;
| last_run_outcome | Bedeutung |
|---|---|
| 0 | Fehler |
| 1 | Erfolg |
| 3 | Abgebrochen |
| 5 | Unbekannt |
Damit bekommst Du eine saubere Ăbersicht ĂŒber den aktuellen Zustand.
Schritt 3: HĂ€ufige Fehlerursachen
| Fehlerbild | Mögliche Ursache |
|---|---|
| Step bleibt stehen | HĂ€ngt in SSIS oder wartet auf Timeout |
| RĂŒckgabewert <> 0 | PowerShell/Batch-Fehler, falsche Exit-Codes |
| Zugriff verweigert | Rechte fehlen fĂŒr Datei oder Login |
| Deadlock | konkurrierender Zugriff |
| „Login failed“ | SQL Auth + Passwort abgelaufen |
| „Job owner missing“ | User gelöscht, Job hat keinen Besitzer |
Tipp: Owner immer auf sa setzen. Nicht auf AD-Accounts.
EXEC msdb.dbo.sp_update_job
@job_name = 'DeinJob',
@owner_login_name = 'sa';
Schritt 4: Wiederholende Fehler frĂŒh erkennen
SELECT
j.name, COUNT(*) AS fehleranzahl
FROM msdb.dbo.sysjobhistory h
JOIN msdb.dbo.sysjobs j ON h.job_id = j.job_id
WHERE h.run_status = 0
AND h.run_date >= CONVERT(INT, FORMAT(DATEADD(DAY, -7, GETDATE()), 'yyyyMMdd'))
GROUP BY j.name
ORDER BY fehleranzahl DESC;
Damit findest Du die „SerientĂ€ter“.
Die sollten zuerst stabilisiert werden.
Schritt 5: Stabilisierung
Typische MaĂnahmen:
- Retry-ZĂ€hler setzen:
EXEC msdb.dbo.sp_update_jobstep
@job_name = 'DeinJob',
@step_id = 1,
@retry_attempts = 3,
@retry_interval = 5; -- Minuten
- Logging ergÀnzen (z. B.
PRINT,RAISERROR, Output-Datei) - lange Schritte in kleinere aufteilen
- Parameter prĂŒfen: keine harten Pfade, keine Zeitdifferenzen
- Aufruf per Proxy-Login, wenn Rechte fehlen
- RĂŒckgabewerte abfangen in PowerShell/Batch
Beispiel PowerShell im Jobstep:
try {
# dein Script
exit 0
} catch {
Write-Error $_.Exception.Message
exit 1
}
Schritt 6: Alert per Mail
EXEC msdb.dbo.sp_add_alert
@name = 'Job Failure Alert',
@message_id = 0,
@severity = 16,
@notification_message = 'Ein SQL Agent Job ist fehlgeschlagen.',
@job_name = NULL,
@enabled = 1;
EXEC msdb.dbo.sp_add_notification
@alert_name = 'Job Failure Alert',
@operator_name = 'DBA-Team',
@notification_method = 1; -- E-Mail
Damit bekommst Du’s sofort mit.
Mein Fazit
SQL Agent Jobs sind oft unterschÀtzt.
Sie laufen leise im Hintergrund – bis sie’s nicht mehr tun.
Wenn Du regelmĂ€Ăig prĂŒfst, sauber protokollierst und Alerts setzt, sparst Du Dir viel Ărger.