Partager via


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 Assertion SQL Server : 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 s’assurer que certaines conditions sont satisfaites. Dans ce sens, une assertion se comporte comme une erreur. Vous pouvez considérer les affirmations comme des erreurs emphatiques et fermes. La condition spécifiée doit être remplie pour que le programme continue 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’affirmation est levée. L’erreur 3624 vous informe qu’une telle condition n’a pas été remplie et qu’une assertion 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 déclenchée pendant 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 d’un échec d’assertion :

Bogue du produit
Une raison courante pour les échecs d’assertion est des problèmes dans le produit qui mènent à des conditions qui ne sont pas vraies. Ces problèmes doivent être examinés par Microsoft et lorsqu’ils sont reproduits et compris peuvent être résolus.

La corruption de base de données Une autre cause courante des échecs d’assertion est des incohérences physiques dans les bases de données. Les structures de données endommagées, lorsqu’elles sont lues en mémoire, peuvent provoquer la fausse condition attendue et donc déclencher une assertion.

La bibliothèque externe ou le pilote de filtre Une cause quelque peu courante pour les messages d’assertion a été détectée par une DLL externe dans la mémoire SQL Server ou un pilote de filtre conçu pour surveiller ou intercepter l’activité SQL Server. Si un 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 lorsque certains modules ou pilotes de filtre sont chargés.

Le matériel défectueux (mémoire, processeur) peut provoquer une altération des structures de données en mémoire et donc 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 de 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 à la mise à niveau vers cette build.

  4. Dans certains cas, vous pouvez rechercher la condition d’assertion spécifique dans la partie Assertion ayant échoué dans la partie 17066 de l’erreur 17066. Par exemple, dans la recherche lck_sufficient (lckMode, LCK_M_IX)de message ci-dessus. Cette expression vous aidera à rechercher un problème de correspondance plus précis. Cette expression est la condition qui déclenche l’assertion en premier lieu et qui 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 tout 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 l’espace mémoire SQL Server et vérifiez également 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 en matière de performances et de cohérence lorsque certains modules ou pilotes de filtre sont chargés.

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

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