Categories: SQL ServerT-SQL

Von Anfang an – Startup Script Für SQL Server

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

Fumus

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago