So funktioniert Community: Auf mein kleines Skript zur Überprüfung des Backups von SQL Servern habe ich viel Rückmeldung bekommen. Zwei Leser haben mir Verbesserungsvorschläge geschickt. Daher gibt es hier nun neue Fassungen des Skripts. Es lässt sich in Monitoring-Systeme einbinden und prüft dann, ob die Datenbanken auf einem SQL Server aktuell gesichert sind.
SQL-Skript mit anderer Auswahl
Die erste Überarbeitung stammt von Martin Wieser. Sie bringt folgende Änderungen in das SQL-Skript ein, das die Prüfung auf dem SQL Server ausführt:
- Datenbanken, die noch nie gesichert wurden, werden damit erkannt
- Datenbanken, die es nicht mehr gibt, werden nun nicht mehr als fehlerhaft gemeldet
- Datenbanken, die üblicherweise nicht gesichert werden (tempdb, model, msdb) ignoriert das Skript
- Um etwas Toleranz in die Prüfung zu bringen, fragt sie ein Intervall von 25 Stunden ab, nicht von 24 Stunden
DECLARE @BackupInterval int SET @BackupInterval = 25 SET NOCOUNT ON SELECT ISNULL(b.BackupStatus,'Critical') 'BackupStatus', d.name 'Datenbank', b.start 'Start', b.finish 'Finish', b.HoursAgo, b.BackupType FROM sys.databases d LEFT OUTER JOIN ( SELECT CASE WHEN (DATEDIFF(hh, MAX(backup_finish_date), GETDATE())) > @BackupInterval THEN 'Critical' ELSE 'OK' END AS BackupStatus , database_name AS 'Databasename' , type AS BackupType , MAX(backup_start_date) AS Start , MAX(backup_finish_date) AS Finish , (DATEDIFF(s, MAX(backup_start_date), MAX(backup_finish_date))) AS DurationSec , (DATEDIFF(hh, MAX(backup_finish_date), GETDATE())) AS HoursAgo FROM msdb..backupset WHERE (database_name <> 'model' or type <> 'L') and (database_name <> 'msdb' or type <> 'L') GROUP BY database_name, type ) b ON b.databasename = d.name WHERE d.name NOT IN ('tempdb','model','msdb') AND STATE <> 1 ORDER BY ISNULL(b.BackupStatus,'Critical')
Prüfung mit mehreren Stufen
Die zweite Überarbeitung kommt von Franz Holzer aus dem Icinga-Team. Er hat die Batch-Datei erweitert, die das Prüfungsergebnis verarbeitet. Es ist in der Lage, verschiedene Fehlersituationen zu unterscheiden und über den Rückgabewert anzuzeigen:
- Status 0: Alle geprüften Datenbanken sind aktuell gesichert
- Status 1: Der Sicherungsstatus konnte nicht abgerufen werden
- Status 2: Mindestens eine Datenbank ist nicht aktuell gesichert
Gleichzeitig ist dieses Batch so verändert, dass es eine benannte Instanz des SQL Server abfragt.
Neue Fassung des ursprünglichen Skripts
Das ursprüngliche Skript hatte in seiner Auswertungsroutine leider einen logischen Fehler: Es meldete nur dann ein fehlerhaftes Backup, wenn keine der Datenbanken aktuell gesichert war. Das ist aber selten sinnvoll – vielmehr sollte das Monitoring ja Alarm schlagen, wenn mindestens eine Datenbank nicht gesichert ist. Das ist in der neuen Auswertung nun berücksichtigt.
In dem neuen Download-Archiv sind alle drei Varianten abgelegt. Wer Bedarf hat, kann sich daraus auch eine eigene Fassung zusammenbauen.
Check-SQLServer-Backup-aktuell (2,7 KiB, 2.022-mal heruntergeladen, letzte Änderung am 22. Mai 2012)
http://faq-o-matic.net/?p=4063