KB4058565 - CORRECTIF : Erreur d’assertion lors de l’exécution d’une procédure stockée qui référence un objet volumineux dans SQL Server 2014, 2016 et 2017

S’applique à
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 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)

Symptômes

Une erreur d’assertion peut se produire lorsque Microsoft SQL Server exécute à plusieurs reprises une procédure stockée qui effectue les opérations suivantes :

  • Prend un objet volumineux, tel que varchar(max) ou varbinary(max), comme argument, et
  • Crée une table temporaire limitée à l’exécution de la procédure, et
  • Utilise l’argument d’objet volumineux dans la table temporaire.

Vous pouvez trouver l’erreur d’assertion qui ressemble à ce qui suit dans le journal des erreurs SQL Server :

DATE/HEURE SPID Erreur : 17065, Gravité : 16, État : 1.

Date/heure SPID SQL Server Assertion : Fichier : FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Tentative d’accès au handle blob expiré (1). Cette erreur peut être liée au minutage. Si l’erreur persiste après la réexécution de l’instruction, utilisez DBCC CHECKDB pour case activée la base de données à des fins d’intégrité structurelle, ou redémarrez le serveur pour vous assurer que les structures de données en mémoire ne sont pas endommagées.

DATE/HEURE SPID Erreur : 3624, Gravité : 20, État : 1.

DATE/HEURE SPID Une case activée d’assertion système a échoué. Pour plus d’informations, consultez le journal des erreurs SQL Server. En règle générale, un échec d’assertion est dû à un bogue logiciel ou à une altération des données. Pour case activée d’altération de la base de données, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft pendant l’installation, un mini-vidage est envoyé à Microsoft. Une mise à jour peut être disponible auprès de Microsoft dans le dernier Service Pack ou dans un correctif logiciel du support technique.

Cause

SQL Server a une logique interne pour désactiver la mise en cache des requêtes qui référencent des objets volumineux afin que les exécutions suivantes ne référencent pas ces bases de données (qui ont été créées lors des exécutions précédentes et ne sont donc pas valides pour les exécutions suivantes). Cette logique n’a pas géré le cas de la résolution de noms différée (DNR) sur les tables temporaires qui a provoqué la mise en cache de ces plans. Les tables temporaires délimitées sont coûteuses à créer et SQL Server les met en cache pour les réutiliser dans les exécutions suivantes. Cela empêche la recompilation de ces requêtes en raison de modifications de schéma.

En savoir plus sur la résolution de noms différée.

Résolution

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

Mise à jour cumulative 8 pour SQL Server 2016 SP1

Mise à jour cumulative 4 pour SQL Server 2017

Mise à jour cumulative 10 pour SQL Server Service Pack 2 2014

À propos des mises à jour cumulatives pour SQL Server

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et correctifs de sécurité qui se trouvaient dans la version précédente. Consultez la dernière mise à jour cumulative pour SQL Server :

Dernière mise à jour cumulative pour SQL Server 2016

Dernière mise à jour cumulative pour SQL Server 2017

dernières mises à jour cumulatives pour SQL Server 2014

É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éférences

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