KB4483571 - CORRECTIF : échec d’assertion possible lorsqu’une transaction entre bases de données impliquant une base de données de groupe de disponibilité est validée à partir d’un déclencheur SQL Server

S’applique à
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer Windows SQL Server 2017 Enterprise Core Windows SQL Server 2017 Enterprise Windows

Symptômes

Supposons que vous avez au moins un groupe de disponibilité AlwaysOn avec DTC_SUPPORT=PER_DB dans Microsoft SQL Server 2016 ou 2017. Si vous exécutez un déclencheur SQL Server qui contient une transaction entre bases de données impliquant au moins une des bases de données du groupe de disponibilité, un échec d’assertion peut se produire. Le journal des erreurs de SQL Server signale les messages d’échec d’assertion suivants :

DateTime spid20s * *******************************************************************************
DateTime spid20s * DÉBUT DU VIDAGE DE LA PILE :
DateTime spid20s * Emplacement : FileName :3880
DateTime spid20s * Expression : m_state == BaseXact ::XACT_PREPARED || m_state == BaseXact ::XACT_COMMITTED
DateTime spid20s * SPID : 20

DateTime spid20s Error : 17066, Sgraveity : 16, State : 1.
DateTime spid20s SQL Server Assertion : File< : FileName>, line=LineNumber Failed Assertion = 'm_state == BaseXact ::XACT_PREPARED || m_state == BaseXact ::XACT_COMMITTED'. Cette erreur peut être liée à la minutage. Si l’erreur persiste après la réexécution de l’instruction, utilisez DBCC CHECKDB pour vérifier l’intégrité structurelle de la base de case activée ou redémarrez le serveur pour vous assurer que les structures de données en mémoire ne sont pas endommagées.
DateTime spid20s Error : 3624, Severity : 20, State : 1.
DateTime spid20s Un case activée d’assertion système a échoué. Pour plus d’informations, consultez le journal des erreurs de SQL Server. En règle générale, un échec d’assertion est causé par un bogue logiciel ou une altération des données. Pour vérifier la case activée pour la base de données endommagée, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft pendant l’installation, un mini-vidage sera envoyé à Microsoft. Une mise à jour peut être disponible auprès de Microsoft dans le dernier Service Pack ou dans un correctif du Support technique.

En outre, un message d’erreur semblable au suivant peut s’afficher :

DateTime Erreur serveur : 19407, Gravité : 16, État : 1.

DateTime Server Le bail entre le groupe de disponibilité « GroupName » et le cluster de basculement Windows Server a expiré. Un problème de connectivité s’est produit entre l’instance de SQL Server et le cluster de basculement de Windows Server. Pour déterminer si le groupe de disponibilité bascule correctement, case activée la ressource de groupe de disponibilité correspondante dans le cluster de basculement Windows Server.

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».

Résolution

Informations sur les mises à jour cumulatives :

Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :

À propos des mises à jour cumulatives 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. Consultez les dernières mises à jour cumulatives pour SQL Server :

Informations sur le correctif logiciel à la demande :

Ce problème est résolu dans les correctifs logiciels à la demande suivants pour SQL Server :

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.