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