Für das Monitoring habe ich zwei kleine Skripte geschrieben, die prüfen, ob SQL Server (ab Version 2005) erreichbar ist und ob alle Datenbanken online sind. Ein solches Skript kann man in vielen Monitoring-Systemen einbinden und regelmäßig ausführen. Wie in solchen Fällen üblich, gibt das Skript den Exitcode 0 zurück, wenn alles okay ist und den Wert 1, wenn ein Fehler vorliegt.
Die Batches nutzen Komponenten, die auf jedem SQL Server lokal vorhanden sind, es empfiehlt sich daher, die Prüfung direkt auf dem jeweiligen Server auszuführen. Die Prüfung selbst verursacht so gut wie keine Last und ist in Sekundenbruchteilen beendet. Da beide Skripte die Windows-Anmeldung nutzen, ist für die Ausführung ein Konto mit Login-Berechtigung auf dem SQL Server nötig. Das zweite Skript benötigt darüber hinaus sysadmin-Rechte im SQL Server.
Skript 1: Ist SQL Server erreichbar?
Das erste Skript versucht sich mit dem lokalen SQL Server zu verbinden und dessen Versionsnummer auszulesen. Wenn der erwartete Wert zurückkommt, gilt die Prüfung als bestanden.
@echo off rem Das Skript verbindet sich mit dem lokalen SQL Server und fragt die Versionsnummer ab sqlcmd -E -Q "SELECT @@version" | find /i "Microsoft SQL Server"
Skript 2: Sind die Datenbanken online?
Das zweite Skript verbindet sich mit dem lokalen SQL Server und liest den Status aller Datenbanken aus. Ist dieser nicht “offline”, so gilt die Prüfung als bestanden.
@echo off rem Das Skript verbindet sich mit dem lokalen SQL Server und fragt den Status aller Datenbanken ab sqlcmd -E -W -h-1 -Q "SET NOCOUNT ON SELECT Name,state_desc FROM sys.databases" | find /I /V "offline" >nul
Hier die Skripts zum Download:
Check-SQLServer-online (703 bytes, 1.938-mal heruntergeladen, letzte Änderung am 2. April 2012)
http://faq-o-matic.net/?p=3936