Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
SĂ©lectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

SymptĂ´mes

Supposons que vous créez un groupe de disponibilité à l’aide de la clause WITH DTC_SUPPORT = PER_DB dans Microsoft SQL Server. Lorsque vous essayez d’exécuter une instruction SAVE TRANSACTION dans une transaction ou des procédures stockées système telles que sp_executesql, vous recevez l’un des messages d’erreur suivants :

Msg 627, Niveau 16, État 0, LineNumber
Impossible d’utiliser SAVE TRANSACTION dans une transaction distribuée.
Msg 12324, Niveau 16, État 100, LineNumber
Les transactions distribuées (DTC) ne sont pas prises en charge avec les tables mémoire optimisées.
Erreur : 3933, Gravité : 16, État : 1.
Impossible de promouvoir la transaction vers une transaction distribuée, car cette transaction comporte un point d’enregistrement actif.

Cause

Lorsqu’une base de données dans Always On groupe de disponibilité est activée pour WITH DTC_SUPPORT = PER_DB, tant qu’une transaction implique plusieurs bases de données, la transaction est promue en transaction MSDTC dans SQL Server 2016 SP2 et SQL Server 2017. Il existe des limitations dans les transactions MSDTC. Par exemple, les points d’enregistrement ne peuvent pas être utilisés, les tables optimisées en mémoire ne peuvent pas être utilisées.

Dans certains cas, les transactions entre bases de données se produisent non pas parce que les utilisateurs ont des transactions impliquant deux bases de données utilisateur, mais parce que les transactions impliquent la base de données actuelle et les bases de données système (master, tempdb, modèle, base de données de ressources système). Étant donné que la base de données de ressources système est en fait en lecture seule, il n’est pas nécessaire de promouvoir une transaction MSDTC si une transaction entre bases de données implique une base de données de ressources système, mais pas d’autres bases de données système. 

RĂ©solution

Le correctif introduit dans cette base de connaissances ignore la promotion vers la transaction MSDTC si la base de données de ressources système et une base de données utilisateur qui fait partie d’un groupe de disponibilité activé pour PER_DB DTC sont impliqués dans une transaction entre bases de données au sein de la même instance SQL Server.

Par conséquent, si la cause d’origine des erreurs répertoriées ci-dessus est une transaction entre bases de données impliquant une base de données de ressources système, ce correctif y remédiera. Parfois, l’utilisateur peut voir les erreurs répertoriées ci-dessus avec la même cause sous-jacente. La liste suivante répertorie les conditions dans lesquelles ce correctif s’applique :

  • Une base de donnĂ©es fait partie d’un groupe de disponibilitĂ© Always On activĂ© with DTC_SUPPORT = PER_DB.

  • Une transaction entre bases de donnĂ©es implique cette base de donnĂ©es et la base de donnĂ©es de ressources système dans la mĂŞme instance SQL Server.

  • Ă€ l’intĂ©rieur de la transaction entre bases de donnĂ©es, SAVE TRANSACTION est utilisĂ© ou des tables mĂ©moire optimisĂ©es sont impliquĂ©es.

Une telle transaction échouerait avec des erreurs répertoriées ci-dessus sans ce correctif. Avec ce correctif, cette transaction doit continuer.

Remarque : ce correctif résout les transactions entre bases de données qui impliquent la base de données de ressources système, mais toute transaction entre bases de données impliquant des bases de données utilisateur et contenant une instruction SAVE TRANSACTION échoue et doit être réécrite.

Ce problème est résolu dans la mise à jour cumulative suivante pour SQL Server :

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Découvrez les dernières mises à jour cumulatives pour SQL Server :

Informations supplémentaires

Des informations supplémentaires sur DTC_SUPPORT = PER_DB, les tables mémoire optimisées, SAVE TRANSACTION sont disponibles dans les liens suivants.

Les transactions de base de données au sein de la même instance SQL Server lient cette partie à https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
tables mémoire optimisées lient cette partie à
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION liez cette partie Ă  https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Références

Découvrez la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×