Quelle est la portée de CONTEXT_INFO dans SQL Server?
Je suis en utilisant CONTEXT_INFO de passer d'un utilisateur à un déclencheur de suppression pour les fins d'une vérification/l'histoire de la table. J'essaie de comprendre la portée de CONTEXT_INFO et si je suis entrain de créer un potentiel de condition de course.
Chacune de mes tables de base de données a une procédure stockée pour gérer les supprime. La suppression de la procédure stockée prend le nom d'utilisateur en tant que paramètre, et définit CONTEXT_INFO avec le nom d'utilisateur. Mon déclencheur de suppression puis saisit le CONTEXT_INFO et l'utilise pour mettre à jour une table d'audit qui indique la personne qui a supprimé la ligne(s).
La question est de savoir si deux supprime sprocs de différents utilisateurs sont en cours d'exécution dans le même temps, peut CONTEXT_INFO situé dans l'une des sprocs être consommée par le déclenchement de feu tiré par l'autre procédure stockée?
J'ai vu cet article http://msdn.microsoft.com/en-us/library/ms189252.aspx mais je ne suis pas clair sur la portée des sessions et des lots de SQL Server qui est la clé de l'article utile!
J'ai poster le code, mais à court de temps pour le moment. Je vais modifier plus tard si ce n'est pas assez claire.
Merci d'avance pour toute aide.
Vous devez vous connecter pour publier un commentaire.
Contexte info n'a pas de portée (dans le sens de la langue d'étendue variables) et est lié à la durée de session. Une fois réglé, le contexte info séjour à la valeur de consigne jusqu'à ce que la connexion est fermée (la fin de la session) ou jusqu'à ce qu'une nouvelle valeur est définie. Étant donné que l'exécution d'une session est toujours séquentiel, il n'est pas question de la simultanéité.
SI vous définissez le contexte de l'info dans une procédure, de la détente exécutée par la suite sur cette session va voir la nouvellement mis en contexte info valeur. Réglage de la valeur de l'id utilisateur dans le contexte de l'info, comme vous le proposer, et de l'utiliser dans des déclencheurs est l'exemple typique du contexte info et est parfaitement sûr en ce qui concerne la concurrence, depuis le fond, il n'y a pas de simultanéité pour en parler. Si vous envisagez de définir le contexte de l'info dans une procédure stockée, puis compter sur elle dans un déclencheur qui s'exécute en raison des suppressions qui se produisent dans ladite procédure, alors votre lot n'a pas fini de pourtant si, selon l'article, vous vous êtes connecté, vous pouvez récupérer la conetxt info de la
sys.dm_exec_requests
DMV ou de laCONTEXT_INFO()
fonction. Il ne sera pas encore poussé danssys.dm_exec_sessions
, qui ne peut intervenir qu'après que vous quittez la procédure stockée et la finition de tout autre appel dans les lots T-SQL envoyées au serveur (la "demande").J'ai utilisé cette méthode pour la vérification à un site client et ils l'ont utilisé massivement pendant près de 6 mois maintenant sans aucun problème.
Le contexte de l'information est portée à la connexion en cours pour le lot en cours et tous les lots qui commencent après le lot en cours est terminée. Deux utilisateurs dans votre environnement, soit pour ne pas être sur la même connexion, ou si il y a le partage de connexion ils ont encore leurs propres valeurs, si elles se chevauchent à tous. Si l'on est venu après l'autre, puis, la seconde serait de remplacer le premier, mais il aurait été fait avec elle d'ici là de toute façon. Au moins c'est ma compréhension de la façon dont il fonctionne. Vous pouvez consulter MARS (Multiple Active Result set) pour plus d'informations sur elle.