Comment exécuter une procédure stockée dès le démarrage de SQL Server ?

Nous allons voir comment on peut exécuter n’importe quelle procédure stockée dès le démarrage de SQL Server, à l’aide de la procédure stockée sp_procoption

Il peut être parfois intéressant de démarrer une application, ou d’exécuter une requête dès le démarrage du service SQL Server.

Cela requiert :

=> que la procédure soit stockée dans la base de données système master : en effet, la procédure stockée à créer sera exécutée dès la récupération de cette base de données, qui est la première à être récupérée.
=> que la procédure n’accepte aucun paramètre en entrée, ni aucun paramètre en sortie (propriété OUTPUT interdite)

Supposons que nous souhaitons par exemple savoir à quelle heure le serveur a redémarré, en cas de crash.
Cela n’est pas vraiment utile puisque nous pouvons le savoir à l’aide des journaux SQL Server :

Mais nous nous en servirons simplement pour l’exemple.

Nous pouvons tout aussi bien démarrer un service Windows à l’aide de la procédure stockée système xp_servicecontrol, ou encore exécuter une application à l’aide d’une autre procédure stockée étendue système xp_cmdshell

Créons la table suivante :

1
2
3
4
5
6
7
8
USE MASTER
GO
 
CREATE TABLE TbDatesRedemarrageSQLServer
(
  dateRedemarrageSQLServer DATETIME
)
GO

Créons maintenant notre procédure stockée :

1
2
3
4
5
6
7
8
9
CREATE PROCEDURE PsGetHeureRedemarrageSQLServer
AS
BEGIN
  INSERT INTO dbo.TbDatesRedemarrageSQLServer
  (
    dateRedemarrageSQLServer
  )
  SELECT GETDATE() -- retourne la date courante
END

Marquons cette procédure stockée comme devant être exécutée au démarrage de l’instance SQL Server.

Nous pouvons exécuter :
EXEC master.dbo.sp_procoption 'PsGetHeureRedemarrageSQLServer', 'startup', 'on'

mais aussi :

EXEC master.dbo.sp_procoption 'PsGetHeureRedemarrageSQLServer', 'startup', 'true'

Comme vous le voyez :

– le premier paramètre est le nom de la procédure a exécuter. Ce ne peut pas être un autre type de module SQL (fonction, …)
– le second paramètre est obligatoirement ‘startup’, la procédure n’acceptant pas d’autre valeurs
– le troisième paramètre peut prendre les valeurs suivantes : ‘on’, ‘off’, ‘true’, ‘false’.

Les valeurs ‘on’ est ‘true’ ont le même effet : celui d’activer la procédure pour l’exécution dès le redémarrage de SQL Server
Les valeurs ‘off’ est ‘false’ ont l’effet inverse

Arrêtons maintenant le service SQL Server :

Redémarrons-le :

Exécutons la requête suivante :

1
2
SELECT dateRedemarrageSQLServer
FROM master.dbo.TbDatesRedemarrageSQLServer

ElSüket

Merci à MikeDavem ;)

Laisser un commentaire