Les couches de l'API d'accès aux données comme ODBC, OLE-DB et SqlClient appellent la procédure stockée (interne) sp_reset_connection lors de la réutilisation d'une connexion à partir d'un pool de connexions. Il le fait pour réinitialiser l'état de la connexion avant qu'elle ne soit réutilisée.
Il ne semble pas y avoir de documentation officielle sur les éléments réinitialisés, mais voici une liste non officielle.
sp_reset_connection réinitialise les aspects suivants d'une connexion :
- Il réinitialise tous les états et numéros d'erreur (comme @@error)
- Il arrête tous les EC (contextes d'exécution) qui sont des threads enfants d'un EC parent exécutant une requête parallèle
- Il attendra toutes les opérations d'E/S en attente qui sont en attente
- Cela libérera tous les tampons détenus sur le serveur par la connexion
- Cela déverrouillera toutes les ressources de tampon utilisées par la connexion
- Cela libérera toute la mémoire allouée appartenant à la connexion
- Cela effacera toutes les tables de travail ou temporaires créées par la connexion
- Cela tuera tous les curseurs globaux appartenant à la connexion
- Cela fermera tous les descripteurs SQL-XML ouverts
- Cela supprimera toutes les tables de travail liées à SQL-XML ouvertes
- Cela fermera toutes les tables système
- Cela fermera toutes les tables d'utilisateurs
- Cela supprimera tous les objets temporaires
- Cela annulera les transactions ouvertes
- Il sortira d'une transaction distribuée lorsqu'il sera inscrit
- Cela décrémentera le nombre de références pour les utilisateurs dans la base de données actuelle ; ce qui libère le verrouillage de la base de données partagée
- Cela libérera les verrous acquis
- Cela libérera toutes les poignées qui pourraient avoir été acquises
- Cela réinitialisera toutes les options SET aux valeurs par défaut
- Cela réinitialisera la valeur @@rowcount
- Cela réinitialisera la valeur @@identity
- Il réinitialisera toutes les options de trace au niveau de la session à l'aide de dbcc traceon()
sp_reset_connection ne réinitialisera PAS :
- Contexte de sécurité, c'est pourquoi le regroupement de connexions correspond aux connexions en fonction de la chaîne de connexion exacte
- Si vous avez saisi un rôle d'application à l'aide de sp_setapprole, puisque les rôles d'application ne peuvent pas être annulés
- Le niveau d'isolement des transactions