MSSQLSERVER_17066

Se aplica a: SQL Server

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 17066
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico SQLASSERT_ONLY
Texto del mensaje Aserción de SQL Server: Archivo: <%s>, line=%d Error de aserción = '%s'. Puede que este error esté relacionado con el tiempo de espera. Si el error persiste después de volver a ejecutar la instrucción, utilice DBCC CHECKDB para comprobar la integridad estructural de la base de datos, o bien reinicie el servidor para asegurarse de que las estructuras de datos en memoria no están dañadas.

Explicación

Las aserciones son instrucciones colocadas en el código de una aplicación para asegurarse de que se cumplen determinadas condiciones. En ese sentido, una aserción se comporta de forma similar a un error. Puede pensar en aserciones como errores firmes y empáticos. La condición especificada debe cumplirse para que el programa continúe con la ejecución regular. Si no se cumple la condición, se genera la aserción. Para obtener más información, vea Aserciones de C/C++.

SQL Server usa aserciones en muchos lugares para asegurarse de que las condiciones son verdaderas. Por ejemplo, la condición 'existingState == DB_Unencrypted' afirma que se descifra un estado de base de datos antes de ejecutar el siguiente comando en el código. Si no es así, se genera la aserción. El error 3624 le notifica que no se ha cumplido dicha condición y se ha generado una aserción.

El error 3624 se genera junto con MSSQLSERVER_3624. Estos son ejemplos de cómo puede ver estos errores en el registro de errores de SQL Server. También verá la condición de aserción generada durante el tiempo de ejecución y el error se envía desde SQL Server a la aplicación 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.

Causa

Estas son algunas de las posibles razones para que se produzca un error de aserción:

Error del producto
Una razón común para los errores de aserción son problemas en el producto que conducen a que las condiciones no sean verdaderas. Microsoft debe investigar estos problemas y, cuando se reproducen y entienden, se pueden corregir.

Daños en la base de datos Otra causa común de errores de aserción es incoherencias físicas en las bases de datos. Las estructuras de datos dañadas, cuando se leen en la memoria, pueden provocar que las condiciones esperadas sean falsas y, por tanto, generar una aserción.

Biblioteca externa o controlador de filtro Una causa algo común de los mensajes de aserción se ha detectado que la DLL externa dentro de la memoria de SQL Server o un controlador de filtro diseñado para supervisar o interceptar la actividad de SQL Server. Si este componente externo modifica objetos o estructuras que usa SQL Server, pueden producirse errores de aserción. Para obtener más información, consulte Problemas de rendimiento y coherencia cuando se cargan determinados módulos o controladores de filtro.

El problema de hardware (memoria, CPU) El hardware defectuoso puede causar daños en las estructuras de datos en la memoria y, por tanto, provocar errores de aserción. Este problema es menos común, pero se produce.

Acción del usuario

  1. Compruebe la compilación de SQL Server, consulte Determinar qué versión y edición de SQL Server Motor de base de datos está ejecutando.

  2. Busque las actualizaciones más recientes disponibles para la versión de SQL Server o abra mejor el archivo de Excel que muestra todas las correcciones de todas las compilaciones.

  3. Revise los artículos o el archivo de Excel para ver las correcciones de aserción publicadas después de la compilación actual de SQL Server. Si encuentra una compilación posterior que corrija los problemas de aserción, considere la posibilidad de actualizar a esa compilación.

  4. En algunos casos, puede buscar la condición de aserción específica en Error de aserción parte del error 17066. Por ejemplo, en el mensaje anterior, busque lck_sufficient (lckMode, LCK_M_IX). Esta expresión le ayudará con una búsqueda más precisa de un problema coincidente. Esta expresión es la condición que desencadena la aserción en primer lugar y es bastante específica.

  5. Ejecute DBCC CHECKDB en las bases de datos. Si DBCC CHECKDB notifica errores de daños en la base de datos, céntrese en resolver ese problema antes de cualquier otra cosa. Restaure una copia de seguridad limpia de la base de datos e investigue la causa principal de las incoherencias de la base de datos. Para obtener más información, consulte Solución de errores de coherencia de la base de datos notificados por DBCC CHECKDB.

  6. Compruebe si hay módulos externos cargados en el espacio de memoria de SQL Server y compruebe también si hay controladores de filtro.

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

    Para los controladores de filtro, ejecute el siguiente comando desde el símbolo del sistema.

    fltmc filters
    

    Siga las recomendaciones de Problemas de rendimiento y coherencia cuando se cargan determinados módulos o controladores de filtro.

  7. Si ya ha actualizado sql Server a la actualización acumulativa más reciente y DBCC CHECKDB no notifica ningún error, póngase en contacto con el soporte técnico de Microsoft y esté listo para proporcionar la siguiente información:

    1. Registros de errores de SQL Server desde la carpeta \Log
    2. Volcados de memoria de SQL Server (SQLDump00xx.mdmp) generados en la carpeta \Log
    3. Pasos para reproducir la aserción cuando esté disponible. ¿Qué consulta o acción conduce a la aserción que se va a generar?
    4. Salida de fltmc filters y desde la DMV "sys.dm_os_loaded_modules".