Freigeben über


MSSQLSERVER_17066

Gilt für:SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 17066
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name SQLASSERT_ONLY
Meldungstext SQL Server Assertion: File: <%s>, line=%d Failed Assertion = '%s'. Dieser Fehler hängt möglicherweise mit dem Ausführungszeitpunkt zusammen. Wenn der Fehler nach dem erneuten Ausführen der Anweisung weiterhin auftritt, überprüfen Sie die Datenbank mit DBCC CHECKDB auf strukturelle Integrität, oder starten Sie den Server neu, um sicherzustellen, dass keine speicherresidenten Datenstrukturen beschädigt sind.

Erklärung

Asserts sind Anweisungen, die im Code einer Anwendung platziert werden, um sicherzustellen, dass bestimmte Bedingungen erfüllt sind. In dieser Hinsicht verhält sich ein Assert ähnlich wie ein Fehler. Sie können sich Behauptungen als emphatische, feste Fehler vorstellen. Die angegebene Bedingung muss erfüllt sein, damit das Programm die reguläre Ausführung fortsetzen kann. Wenn die Bedingung nicht erfüllt ist, wird die Assertion ausgelöst. Weitere Informationen finden Sie unter C/C++-Assertionen.

SQL Server verwendet Asserts an vielen Stellen, um sicherzustellen, dass Bedingungen wahr sind. Beispielsweise bestätigt die Bedingung "existingState == DB_Unencrypted", dass ein Datenbankzustand unverschlüsselt ist, bevor der nächste Befehl im Code ausgeführt wird. Wenn dies nicht der Fall ist, wird die Assertion ausgelöst. Fehler 3624 benachrichtigt Sie, dass eine solche Bedingung nicht erfüllt wurde und eine Bestätigung ausgelöst wurde.

Fehler 3624 wird zusammen mit MSSQLSERVER_3624 ausgelöst. Hier finden Sie Beispiele dafür, wie Sie diese Fehler im SQL Server Fehlerprotokoll anzeigen können. Außerdem wird die Assert-Bedingung während der Laufzeit ausgelöst, und der Fehler wird von SQL Server an die Clientanwendung gesendet.

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.

Ursache

Im Folgenden sind einige mögliche Gründe für einen Assert-Fehler aufgeführt:

Produktfehler
Ein häufiger Grund für Assert-Fehler sind Probleme im Produkt, die dazu führen, dass die Bedingungen nicht erfüllt sind. Diese Probleme müssen von Microsoft untersucht werden und können behoben werden, wenn sie reproduziert und verstanden werden.

Datenbankbeschädigung Eine weitere häufige Ursache für Assert-Fehler sind physische Inkonsistenzen in Datenbanken. Beschädigte Datenstrukturen können beim Lesen im Arbeitsspeicher dazu führen, dass die erwarteten Bedingungen falsch sind und somit eine Assertion auslösen.

Externe Bibliothek oder Filtertreiber Es wurde festgestellt, dass eine externe DLL in SQL Server Arbeitsspeicher oder ein Filtertreiber, der zum Überwachen oder Abfangen SQL Server Aktivität entwickelt wurde, eine etwas häufige Ursache für Assert-Meldungen ist. Wenn eine solche externe Komponente Objekte oder Strukturen ändert, die SQL Server verwendet, können Assertionsfehler auftreten. Weitere Informationen finden Sie unter Leistungs- und Konsistenzprobleme beim Laden bestimmter Module oder Filtertreiber.

Hardwareproblem (Arbeitsspeicher, CPU) Fehlerhafte Hardware kann zu Einer Beschädigung von Datenstrukturen im Arbeitsspeicher führen und daher zu Assert-Fehlern führen. Dieses Problem ist weniger häufig, tritt jedoch auf.

Benutzeraktion

  1. Überprüfen Sie Ihren Build von SQL Server. Weitere Informationen finden Sie unter Ermitteln, welche Version und Edition von SQL Server Datenbank-Engine ausgeführt wird.

  2. Suchen Sie die neuesten Updates, die für Ihre SQL Server Version verfügbar sind, oder öffnen Sie am besten die Excel-Datei, in der alle Fixes für alle Builds aufgeführt sind.

  3. Überprüfen Sie die Artikel oder die Excel-Datei, um alle Assert-Korrekturen zu finden, die nach ihrem aktuellen SQL Server Build veröffentlicht wurden. Wenn Sie einen späteren Build finden, der Assert-Probleme behebt, sollten Sie ein Upgrade auf diesen Build in Erwägung ziehen.

  4. In einigen Fällen können Sie im Teil der fehlerhaften Assertion des Fehlers 17066 nach der spezifischen Assert-Bedingung suchen. Suchen Sie beispielsweise in der obigen Nachricht nach lck_sufficient (lckMode, LCK_M_IX). Dieser Ausdruck hilft Ihnen bei einer genaueren Suche nach einem Abgleichsproblem. Dieser Ausdruck ist die Bedingung, die das Assert an erster Stelle auslöst, und er ist ziemlich spezifisch.

  5. Führen Sie DBCC CHECKDB für Ihre Datenbanken aus. Wenn DBCC CHECKDB Datenbankbeschädigungsfehler meldet, konzentrieren Sie sich vor allem auf die Behebung dieses Problems. Stellen Sie eine sauber Datenbanksicherung wieder her, und untersuchen Sie die Grundursache für die Datenbankinkonsistenzen. Weitere Informationen finden Sie unter Behandeln von Datenbankkonsistenzfehlern, die von DBCC CHECKDB gemeldet werden.

  6. Überprüfen Sie, ob externe Module in SQL Server Speicherplatz geladen sind, und überprüfen Sie auch, ob Filtertreiber vorhanden sind.

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

    Führen Sie für Filtertreiber den folgenden Befehl an der Eingabeaufforderung aus.

    fltmc filters
    

    Befolgen Sie die Empfehlungen unter Leistungs- und Konsistenzprobleme, wenn bestimmte Module oder Filtertreiber geladen werden.

  7. Wenn Sie Ihre SQL Server bereits auf das neueste kumulative Update aktualisiert haben und DBCC CHECKDB keine Fehler meldet, wenden Sie sich an den technischen Support von Microsoft, und stellen Sie die folgenden Informationen bereit:

    1. SQL Server Fehlerprotokolle aus dem Ordner \Log
    2. SQL Server Speicherabbilder (SQLDump00xx.mdmp), die im Ordner \Log generiert werden
    3. Schritte zum Reproduzieren des Asserts, sofern verfügbar. Welche Abfrage oder Aktion führt dazu, dass die Assertion ausgelöst wird?
    4. Ausgabe von fltmc filters und aus der "sys.dm_os_loaded_modules DMV.