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

Monitoring: Sind die SQL-Datenbanken aktuell gesichert?

von veröffentlicht am25. April 2012, 06:25 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Downloads, Monitoring, SQL Server   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Zu den wichtigsten Aufgaben des Monitoring gehört die Prüfung, ob alle Datenbanken eines SQL Server aktuell gesichert sind. Viele Werkzeuge fragen dazu die Backup-Software ab. Im Falle des SQL Server geht dies aber auch flexibler und unabhängig von der konkreten Sicherungs-Software: Sofern diese nämlich die mitgelieferte Backup-Schnittstelle verwendet, weiß SQL Server, wann die Sicherung stattgefunden hat. Die meisten Sicherungsprogramme erfüllen diese Voraussetzung.

Das folgende Skript verbindet sich mit dem lokalen SQL Server und fragt die Sicherungsstatus aller Datenbanken ab. Liegt die Sicherung weniger als 24 Stunden zurück, so gilt die Prüfung als bestanden. Wie die meisten Monitoring-Skripte gibt auch dieses den Exitcode 0 zurück, wenn alles in Ordnung ist. Der Code 1 weist auf einen Fehler hin.

Das Skript nutzt die SQL-Syntax des SQL Server, um die Abfrage auszuführen. Folgender SQL-Code ist dazu einsetzbar:

-- Define desired backup interval in hours
DECLARE @BackupInterval int
SET @BackupInterval = 24
SET NOCOUNT ON
SELECT database_name AS 'Database'
, 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
, CASE WHEN (DATEDIFF(hh, MAX(backup_finish_date), GETDATE())) > @BackupInterval THEN 'Critical' ELSE 'OK' END AS BackupStatus
FROM msdb..backupset
GROUP BY database_name, type
ORDER BY database_name

Um diesen mehrzeiligen Code innerhalb einer einzigen Batchdatei an das SQL-Server-Werkzeug sqlcmd.exe verfüttern zu können, bedient sich die Batchdatei eines Tricks: Sie erzeugt eine temporäre SQL-Eingabedatei mit dem Code, ruft sqlcmd.exe mit dieser Datei auf und prüft das Ergebnis. Dadurch muss nicht mehr als eine einzelne Batchdatei an das Monitoring-Tool übergeben werden.

@echo off
rem Sind alle Datenbanken auf SQL Server aktuell gesichert?
rem Nils Kaczenski, WITstor GmbH, 20.2.2012
rem Das Skript verbindet sich mit dem lokalen SQL Server und fragt den Backup-Status aller Datenbanken ab
rem SQL-Eingabedatei entfernen, falls vorhanden
SET SQL=%TEMP%\CheckSQL.sql
IF EXIST %SQL% DEL %SQL%

rem SQL-Eingabedatei erzeugen
echo -- Define desired backup interval in hours>>%SQL%
echo DECLARE @BackupInterval int>>%SQL%
echo SET @BackupInterval = 24>>%SQL%

echo SET NOCOUNT ON>>%SQL%
echo SELECT database_name AS 'Database'>>%SQL%
echo , type AS BackupType>>%SQL%
echo , MAX(backup_start_date) AS Start>>%SQL%
echo , MAX(backup_finish_date) AS Finish >>%SQL%
echo , (DATEDIFF(s,  MAX(backup_start_date), MAX(backup_finish_date))) AS DurationSec >>%SQL%echo , (DATEDIFF(hh, MAX(backup_finish_date), GETDATE())) AS HoursAgo>>%SQL%
echo , CASE WHEN (DATEDIFF(hh, MAX(backup_finish_date), GETDATE())) ^> @BackupInterval THEN 'Critical' ELSE 'OK' END AS BackupStatus>>%SQL%echo FROM msdb..backupset>>%SQL%
echo GROUP BY database_name, type>>%SQL%
echo ORDER BY database_name>>%SQL%

rem SQL-Check ausfuehren
sqlcmd -E -W -h-1 -i %SQL% | find /I "ok" >nul

Und hier ist der Download dieses Skripts:

Download: Check-SQLServer-Backup-aktuell  Check-SQLServer-Backup-aktuell (2,7 KiB, 2.040-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!