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.