MSSQLSERVER_17066

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 17066
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico SQLASSERT_ONLY
Testo del messaggio Asserzione di SQL Server: file: <%s>, line=%d Asserzione non riuscita = '%s'. L'errore può essere correlato agli intervalli di tempo. Se dopo aver rieseguito l'istruzione l'errore persiste, utilizzare DBCC CHECKDB per verificare l'integrità strutturale del database oppure riavviare il server per verificare che le strutture di dati in memoria non siano danneggiate.

Spiegazione

Le asserzioni sono istruzioni inserite nel codice di un'applicazione per garantire che determinate condizioni siano soddisfatte. In tal senso, un'asserzione si comporta in modo simile a un errore. Si può pensare a asserzioni come errori enfatici e fermi. La condizione specificata deve essere soddisfatta per consentire al programma di continuare l'esecuzione regolare. Se la condizione non viene soddisfatta, viene generata l'asserzione. Per altre informazioni, vedere Asserzioni C/C++.

SQL Server usa asserzioni in molte posizioni per assicurarsi che le condizioni siano vere. Ad esempio, la condizione 'existingState == DB_Unencrypted' afferma che uno stato del database non è crittografato prima dell'esecuzione del comando successivo nel codice. In caso contrario, viene generata l'asserzione. L'errore 3624 notifica che tale condizione non è stata soddisfatta e che è stata generata un'asserzione.

L'errore 3624 viene generato insieme a MSSQLSERVER_3624. Ecco alcuni esempi di come visualizzare questi errori nel log degli errori di SQL Server. Verrà visualizzata anche la condizione assert generata durante l'esecuzione e l'errore viene inviato da SQL Server all'applicazione client.

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.

Causa

Ecco alcuni possibili motivi per cui si verifica un errore di asserzione:

Bug del prodotto
Un motivo comune per gli errori di asserzione sono problemi nel prodotto che portano a condizioni non vere. Questi problemi devono essere esaminati da Microsoft e, se riprodotti e compresi, possono essere risolti.

Danneggiamento del database Un'altra causa comune di errori di asserzione è l'incoerenza fisica nei database. Le strutture di dati danneggiate, quando vengono lette in memoria, possono causare che le condizioni previste siano false e generino quindi un'asserzione.

Libreria esterna o driver di filtro Una causa comune per i messaggi di asserzione è stata rilevata da DLL esterna all'interno della memoria di SQL Server o da un driver di filtro progettato per monitorare o intercettare l'attività di SQL Server. Se un componente esterno modifica oggetti o strutture usati da SQL Server, possono verificarsi errori di asserzione. Per altre informazioni, vedere Problemi di prestazioni e coerenza quando vengono caricati determinati moduli o driver di filtro.

L'hardware difettoso (memoria, CPU) può causare il danneggiamento delle strutture di dati in memoria e quindi causare errori di asserzione. Questo problema è meno comune, ma si verifica.

Azione utente

  1. Controllare la build di SQL Server, vedere Determinare la versione e l'edizione del motore di database di SQL Server in esecuzione

  2. Trovare gli aggiornamenti più recenti disponibili per la versione di SQL Server o aprire meglio il file di Excel che elenca tutte le correzioni per tutte le compilazioni

  3. Esaminare gli articoli o il file di Excel per eventuali correzioni di asserzione rilasciate dopo la compilazione corrente di SQL Server. Se si trova una compilazione successiva che risolve i problemi di asserzione, prendere in considerazione l'aggiornamento a tale compilazione.

  4. In alcuni casi, è possibile cercare la condizione di asserzione specifica nella parte Asserzione non riuscita dell'errore 17066. Ad esempio, nel messaggio precedente cercare lck_sufficient (lckMode, LCK_M_IX). Questa espressione consente di eseguire una ricerca più accurata di un problema di corrispondenza. Questa espressione è la condizione che attiva l'asserzione in primo luogo ed è piuttosto specifica.

  5. Eseguire DBCC CHECKDB nei database. Se DBCC CHECKDB segnala errori di danneggiamento del database, concentrarsi sulla risoluzione del problema prima di qualsiasi altra operazione. Ripristinare un backup pulito del database ed esaminare la causa radice per le incoerenze del database. Per altre informazioni, vedere Risolvere gli errori di coerenza del database segnalati da DBCC CHECKDB.

  6. Controllare se sono presenti moduli esterni caricati nello spazio di memoria di SQL Server e verificare anche la presenza di driver di filtro

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

    Per i driver di filtro, eseguire il comando seguente dal prompt dei comandi

    fltmc filters
    

    Seguire le indicazioni riportate in Problemi di prestazioni e coerenza quando vengono caricati determinati moduli o driver di filtro.

  7. Se SQL Server è già stato aggiornato all'aggiornamento cumulativo più recente e DBCC CHECKDB non segnala errori, contattare il supporto tecnico Microsoft ed essere pronti a fornire le informazioni seguenti:

    1. Log degli errori di SQL Server dalla cartella \Log
    2. Dump della memoria di SQL Server (SQLDump00xx.mdmp) generati nella cartella \Log
    3. Passaggi per riprodurre l'asserzione quando disponibile. Quale query o azione comporta la generazione dell'asserzione?
    4. Output da fltmc filters e dalla DMV 'sys.dm_os_loaded_modules.