J'ai toujours pensé que la mise à jour d'une procédure stockée était quelque chose que je pouvais faire pendant que les utilisateurs utilisaient activement le système.
Mais je teste actuellement une mise à jour d'une procédure stockée et pendant qu'un long appel au sproc était en cours d'exécution (il y avait 4+ minutes dans l'appel), j'ai mis à jour le sproc. (J'avais l'intention d'essayer un autre plan de requête dans une fenêtre séparée.)
Quand je suis retourné à la longue course, j'ai eu cette erreur:
The definition of object 'MySprocName' has changed since it was compiled.
Cette erreur semble indiquer que tout sproc qui est activement exécuté échouera si la définition de ce sproc est mise à jour. (Je pensais qu'une fois qu'un sproc commencerait à fonctionner, il utiliserait ce plan pour le reste de la course malgré les modifications apportées à la définition.)
Est-ce vrai? Dois-je avoir des temps d'arrêt pour mettre à jour la définition d'un sproc?
WITH RECOMPILE
? Il s'agit d'une option au niveau de la procédure pour définir la procédure à recompiler après chaque exécution. Cela signifie que le plan sera toujours recompilé et évitera ainsi la réutilisation des plans mis en cache.Réponses:
Oui, il est vrai que vous ne devez pas modifier une procédure stockée en cours d'exécution, car SQL Server ne l'aime pas.
En ce qui concerne les temps d'arrêt, eh bien, vous ne devriez pas apporter de modifications aux procédures stockées fréquemment utilisées dans un environnement de production occupé pendant les heures de fonctionnement comme meilleure pratique.
la source