Logo faq-o-matic.net
Logo faq-o-matic.net

Monitoring: SQL-Backup-Prüfung reloaded

von veröffentlicht am23. Mai 2012, 06:31 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Downloads, Monitoring, Scripting, SQL Server   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 21. November 2012

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.

Download: Check-SQLServer-Backup-aktuell  Check-SQLServer-Backup-aktuell (2,7 KiB, 2.039-mal heruntergeladen, letzte Änderung am 22. Mai 2012)

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!