SQL Server Startup Procedures

  • SQL Server sunucum başladığında başlangıç zamanını bir tabloya kaydetse ve bana mail gönderse ne iyi olurdu?

Gibi taleplere cevap SQL Server’da yer alan startup stored procedürlerde saklıdır. Bu procedürler SQL Server başladığında otomatik çalıştırılan prosedürlerdir.



Her hangi bir prosedürü startup prosedür olarak ayarlamak için sp_procoption sistem prosedürü kullanılır.

Kaynak Kod
1
2
3
exec sp_procoption @ProcName = ['stored procedure name'],
@OptionName = 'STARTUP',
@OptionValue = [on|off]

sp_procoption parametreleri:

  • @ProcName : Otomatik çalışmaya ayarlanacak prosedürün adı
  • @OptionName: Sadece ‘STARTUP’ değerini destekler
  • @OptionValue: Otomatik çalışmayı açmak için ‘ON’, kaoatmak için ‘OFF’ değerleri kullanılır.

sp_procoption prosedürü aşağıdaki kısıtlamalara sahiptir;



  • sysadmin rolünde bir kullanıcı ile oturum açılması gerekmektedir.
  • Sadece standart prosedürler üzerinde çalışmaktadır.
  • Otomatik çalıştırılacak prosedür master veri tabanında olmak zorundadır.
  • Otomatik çalıştırılacak prosedür giriş veya dönüş parametresi bulunduramaz.

Sunucu başlama zamanlarını tutacak veri tabanı, tablolarının oluşturulması:

Kaynak Kod
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
USE MASTER
GO
CREATE DATABASE SERVER_METRICS
GO
USE SERVER_METRICS
GO
CREATE TABLE DBO.SERVER_STARTUP_LOG
(
LOGID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
START_TIME DATETIME NOT NULL
CONSTRAINT DF_START_TIME DEFAULT GETDATE()
)
GO

Otomatik çalışacak prosedürün tanımlanması:

Kaynak Kod
1
2
3
4
5
6
7
8
9
USE MASTER
GO
CREATE PROCEDURE DBO.LOG_SERVER_START
AS
SET NOCOUNT ON
PRINT '*** LOGGING SERVER STARTUP TIME ***'
INSERT INTO SERVER_METRICS.DBO.SERVER_STARTUP_LOG DEFAULT VALUES
GO

Prosedürün otomatik çalışmaya ayarlanması

Kaynak Kod
1
2
3
4
USE MASTER
GO
EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'ON'
GO

Prosedürün otomatik çalışmasını engelleme:

Kaynak Kod
1
2
3
4
USE MASTER
GO
EXEC SP_PROCOPTION LOG_SERVER_START, 'STARTUP', 'OFF'
GO