MSSQLSERVER_3988

S’applique à :SQL Server

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 3988
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique XACT_UNSUPPORT_PARALLEL_TRAN2
Texte du message Une nouvelle transaction n'est pas autorisée parce que d'autres threads sont en cours d'exécution dans la session.

Explication

Cette erreur se produit lorsque vous exécutez une requête distribuée qui joint plusieurs tables hébergées par des instances distantes de SQL Server, alors que le paramètre de session XACT_ABORT est activé. Un message d’erreur semblable au suivant est signalé à l’utilisateur :

Message 3988, niveau 16, état 1, ligne #
Une nouvelle transaction n'est pas autorisée parce que d'autres threads sont en cours d'exécution dans la session.

Cause

Il existe certaines limitations de conception dans la façon dont SQL Server gère les requêtes distribuées (DQ) lorsque les conditions suivantes sont remplies :

  • SQL Server joint plusieurs tables d’une source de données SQL Server distante.
  • La session qui émet la requête n’est pas inscrite dans une transaction distribuée.

Dans ce cas, une tentative d’exécution de la requête peut déclencher l’une ou l’autre des deux erreurs mentionnées dans la section Explication.

Action requise

Pour contourner ce problème, mettez la requête distribuée dans une instruction « begin distributed transaction » :

BEGIN DISTRIBUTED TRANSACTION
/*The actual Distributed Query goes next, outside of comments*/
COMMIT TRANSACTION