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
Würde man eine Prozedur registrieren, bei der die Bedingungen nicht erfüllt sind, würde das so aussehen:
Viel Spaß damit