Von Anfang an – Startup Script Für SQL Server


Andreas Rauch

Sie wollen nach Start des SQL Server ein bestimmtes SQL Script laufen lassen, um etwa den Zeitpunkt des Starts zu protokollieren oder etwa Prüfabfragen zu starten und zu protokollieren? Dann sind Prozeduren, die automatisch nach Start des SQL Servers Dienstes gestartet werden genau das Richtige.

Vergessen Sie Startparameter oder ähnliches. Es gibt extra eine Prozedur, die wiederum andere Prozeduren für den Startup registriert: SP_PROCOPTION.

Die Syntax dazu ist sehr einfach:

USE MASTER; GO EXEC SP_PROCOPTION @ProcName=’NameDerProzedur’, @OptionName='STARTUP', @OPtionValue='ON'; GO EXEC SP_PROCOPTION NameDerProzedur, 'STARTUP', 'ON'; GO



Nun gibts natürlich ein paar Bedingungen dazu:

  • Die Prozedur kann nur solche Prozeduren registrieren, die in der master Datenbank enthalten sind.
  • Die registrierten Prozeduren werden erst dann gestartet, wenn alle Datenbanken ebenfalls widerhergestellt wurden. (wir würden das Laufen nennen)
  • Da die Datenbanken bereits laufen, lassen sich Protokollierungen anstatt in die master natürlich jederzeit auch in eine andere Datenbank protokollieren.
  • Es können mehrere Prozeduren unabhängig registriert werden. Über die Reihenfolge hat man dann allerdings keine Kontrolle.
  • Man muss Sysadmin sein, um Prozeduren registrieren zu können.
  • Die Prozeduren werden logischerweise weder Inputparameter noch Outputparameter besitzten.

Die so registrierten Prozeduren lassen sich natürlich auch wieder deregistrieren:

USE MASTER;
GO

EXEC SP_PROCOPTION NameDerProzedur, @OptionValue 'OFF';
GO

So weit so gut. Die Ideen für was man das verwenden könnte sind manigfaltig. Vom Versenden von Mails an Datenbankbesitzer, dass die Datenbank wieder läuft, bis hin zu Systemauswertungen ist alles machbar. Hier also nur ein kleines Beispiel, wie man den Start des SQL Server protokollieren könnte:

 

 

Create database Logging; GO use Logging; GO create Table Alerts (id int identity, Kommentar varchar(4000) default 'Server Omega starting', Zeit smalldatetime default getdate()); GO Use master; GO Create procedure dbo.ServerLogging as Set NoCount on insert into logging.dbo.Alerts (Kommentar) values (@input) GO Create procedure dbo.ServerLogging2 as Set NoCount on insert into logging.dbo.Alerts (Kommentar) values (‘****SERVERNEUSTART OMEGA*****’) GO --TEST exec dbo.ServerLogging exec dbo.ServerLogging2 select * from logging.dbo.Alerts --Registrierung Use master; GO EXEC SP_PROCOPTION ServerLogging, 'STARTUP', 'ON' GO EXEC SP_PROCOPTION ServerLogging2, 'STARTUP', 'ON' GO --Neustart des Server !!net stop mssql$OMEGA /Y !!net start mssql$Omega --Prüfen, ob erfolgreich select * from logging.dbo.Alerts

 

image

 

Würde man eine Prozedur registrieren,  bei der die Bedingungen nicht erfüllt sind, würde das so aussehen:

image

 

Viel Spaß damit Zwinkerndes Smiley

Kommentare sind geschlossen