MSSQLSERVER_17066

S’applique à :SQL Server

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 17066
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique SQLASSERT_ONLY
Texte du message SQL Server Assertion : Fichier : <%s>, line=%d Failed Assertion = '%s'. Cette erreur est éventuellement liée à un délai d'attente. Si l'erreur persiste après une nouvelle exécution de l'instruction, utilisez DBCC CHECKDB pour vérifier l'intégrité structurelle de la base de données ou redémarrez le serveur pour vous assurer que les structures de données en mémoire ne sont pas corrompues.

Explication

Les assertions sont des instructions placées dans le code d’une application pour garantir que certaines conditions sont remplies. À cet égard, une assertion se comporte comme une erreur. Vous pouvez considérer les assertions comme des erreurs catégoriques et fermes. La condition spécifiée doit être remplie pour que le programme poursuive l’exécution régulière. Si la condition n’est pas remplie, l’assertion est levée. Pour plus d’informations, consultez Assertions C/C++.

SQL Server utilise des assertions à de nombreux endroits pour s’assurer que les conditions sont vraies. Par exemple, la condition « existingState == DB_Unencrypted » affirme qu’un état de base de données n’est pas chiffré avant l’exécution de la commande suivante dans le code. Si ce n’est pas le cas, l’assertion est levée. L’erreur 3624 vous avertit qu’une telle condition n’a pas été remplie et qu’une déclaration a été déclenchée.

L’erreur 3624 est générée avec MSSQLSERVER_3624. Voici des exemples de la façon dont vous pouvez voir ces erreurs dans le journal des erreurs SQL Server. Vous verrez également la condition d’assertion levée au moment de l’exécution et l’erreur est envoyée de SQL Server à l’application cliente.

Error: 17066, Severity: 16, State: 1.
SQL Server Assertion: File: <"e:\\b\\s3\\sources\\sql\\ntdbms\\hekaton\\engine\\hadr\\physical\\ckptctrlprocesslogrecord.cpp">, line=1634 Failed Assertion = 'existingState == DB_Unencrypted'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.
Error: 17066, Severity: 16, State: 1.
SQL Server Assertion: File: <"xdes.cpp">, line=4919 Failed Assertion = 'lck_sufficient (lckMode, LCK_M_IX) || lck_sufficient (lckMode, LCK_M_BU)'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.
SQL Server Assertion: File: <diskio.cpp>, line=2902 Failed Assertion = 'filepos + cBytes <= GetMaxOffsetForIO ()'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

Error: 3624, Severity: 20, State: 1.
A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.

Cause

Voici quelques raisons possibles pour lesquelles un échec d’assertion se produit :

Bogue de produit
L’une des raisons courantes des échecs d’assertion sont des problèmes dans le produit qui conduisent à ce que les conditions ne soient pas vraies. Ces problèmes doivent être examinés par Microsoft et, lorsqu’ils sont reproduits et compris, peuvent être résolus.

Altération de la base de données Une autre cause courante des échecs d’assertion est les incohérences physiques dans les bases de données. Les structures de données endommagées, lorsqu’elles sont lues en mémoire, peuvent entraîner la valeur false des conditions attendues et déclencher ainsi une assertion.

Bibliothèque externe ou pilote de filtre Une cause quelque peu courante des messages d’assertion s’est avérée être due à une DLL externe à l’intérieur de SQL Server mémoire ou à un pilote de filtre conçu pour surveiller ou intercepter l’activité SQL Server. Si un tel composant externe modifie des objets ou des structures que SQL Server utilise, des échecs d’assertion peuvent se produire. Pour plus d’informations, consultez Problèmes de performances et de cohérence lors du chargement de certains modules ou pilotes de filtre.

Problème matériel (mémoire, processeur) Un matériel défectueux peut endommager les structures de données en mémoire et, par conséquent, entraîner des échecs d’assertion. Ce problème est moins courant, mais il se produit.

Action de l'utilisateur

  1. Vérifiez votre build de SQL Server, consultez Déterminer la version et l’édition de SQL Server Moteur de base de données en cours d’exécution.

  2. Recherchez les dernières mises à jour disponibles pour votre version SQL Server ou ouvrez le fichier Excel qui répertorie tous les correctifs pour toutes les builds

  3. Passez en revue les articles ou le fichier Excel pour connaître les correctifs d’assertion publiés après votre build SQL Server actuelle. Si vous trouvez une build ultérieure qui résout les problèmes d’assertion, envisagez de procéder à une mise à niveau vers cette build.

  4. Dans certains cas, vous pouvez rechercher la condition d’assertion spécifique dans la partie Assertion ayant échoué de l’erreur 17066. Par exemple, dans le message ci-dessus, recherchez lck_sufficient (lckMode, LCK_M_IX). Cette expression vous aidera à rechercher plus précisément un problème de correspondance. Cette expression est la condition qui déclenche l’assertion en premier lieu et elle est assez spécifique.

  5. Exécutez DBCC CHECKDB sur vos bases de données. Si DBCC CHECKDB signale des erreurs d’altération de la base de données, concentrez-vous sur la résolution de ce problème avant toute autre chose. Restaurez une sauvegarde de base de données propre et examinez la cause racine des incohérences de base de données. Pour plus d’informations, consultez Résoudre les erreurs de cohérence de base de données signalées par DBCC CHECKDB.

  6. Vérifiez s’il existe des modules externes chargés dans SQL Server espace mémoire et case activée pour les pilotes de filtre

    SELECT * FROM sys.dm_os_loaded_modules
    WHERE company != 'Microsoft Corporation'
    

    Pour les pilotes de filtre, exécutez la commande suivante à partir de l’invite de commandes

    fltmc filters
    

    Suivez les recommandations de la section Problèmes de performances et de cohérence lors du chargement de certains modules ou pilotes de filtre.

  7. Si vous avez déjà mis à niveau votre SQL Server vers la dernière mise à jour cumulative et que DBCC CHECKDB ne signale aucune erreur, contactez le support technique Microsoft et soyez prêt à fournir les informations suivantes :

    1. SQL Server journaux d’erreurs à partir du dossier \Log
    2. SQL Server vidages de mémoire (SQLDump00xx.mdmp) générés dans le dossier \Log
    3. Étapes permettant de reproduire l’assertion lorsqu’elle est disponible. Quelle requête ou action conduit à l’assertion à lever ?
    4. Sortie de fltmc filters et de la sys.dm_os_loaded_modules DMV.