Error de aserción en un servidor reflejado al usar la arquitectura de creación de reflejo de SQL Server
En este artículo se describe un error de aserción de Microsoft SQL Server que puede producirse en un servidor asociado al usar la arquitectura de creación de reflejo de SQL Server.
Versión original del producto: SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008
Número de KB original: 2729953
Síntomas
En la arquitectura de creación de reflejo de SQL Server, es posible que encuentre un error de comprobación de aserción de SQL Server en el servidor asociado (reflejado). En tal caso, compruebe el registro de errores de SQL Server para obtener más información. En el registro, encontrará un mensaje de error similar al siguiente. Este error suele significar que debe recompilar el par reflejado.
Aserción de SQL Server: archivo: loglock.cpp, línea=834 Error de aserción = 'result == LCK_OK' . Este error puede estar relacionado con el tiempo. Si el error persiste después de volver a ejecutar la instrucción, use DBCC CHECKDB para comprobar la integridad estructural de la base de datos o reinicie el servidor para asegurarse de que las estructuras de datos en memoria no están dañadas.
Error: 3624, Gravedad: 20, Estado: 1.
Normalmente, los errores de aserción se producen por un error de software o porque los datos están dañados. Para comprobar si hay daños en la base de datos, considere la posibilidad de ejecutar DBCC CHECKDB
. Si acepta enviar volcados de memoria a Microsoft durante la instalación, se enviará un minivolcado a Microsoft. Puede haber una actualización disponible de Microsoft en el último Service Pack o en un QFE de soporte técnico.
Nota:
Cuando se produce este problema, se genera un archivo de minivolcado en la carpeta de registro de errores de SQL Server. Este archivo tiene un nombre similar al nombre de archivo SQLDumpnnnn.mdmp .
Causa
Este problema puede producirse en diferentes escenarios. Cada escenario tiene una causa y resolución diferentes, y cada escenario puede provocar el mismo mensaje de error y error de aserción.
Nota:
- Aunque la firma de error parece ser muy específica, el error real se debe a una aserción que produjo un error. Por ejemplo, el error podría deberse a una aserción que realiza una comprobación proactiva en el código de SQL Server que valida que las condiciones correctas no se realicen lo más limpiamente posible en lugar de provocar un bloqueo en todo el proceso.
- No puede determinar fácilmente la causa real. Los servicios de soporte al cliente de Microsoft suelen determinar la causa. Normalmente, se realiza mediante la recopilación del archivo de copia de seguridad completo de la base de datos principal y las copias de seguridad del registro de transacciones que cubren el tiempo del problema. Además, es posible que se requiera un archivo de volcado de proceso completo del reflejo para reproducir el problema en una configuración específica.
Solución
Para resolver este problema, obtenga la corrección más reciente para la versión de SQL Server. Para obtener más información, consulte la tabla siguiente.
Causa | Artículo de Knowledge Base | Primero se ha corregido en |
---|---|---|
Comportamiento de bloqueo diferente entre el principal y el reflejo | 2938828 FIX: la creación de reflejo de la base de datos alcanza la aserción y la sesión de creación de reflejo muestra el estado suspendido en SQL Server 2012 o SQL Server 2014 | 2931693 actualización acumulativa 1 para SQL Server 2014, 2931078 actualización acumulativa 9 para SQL Server 2012 SP1 |
Inserción masiva / BCP con Check_Constraints DESACTIVADO | SQL Server 2012 | |
Cambio de las claves de cifrado: clave maestra de base de datos, clave maestra de instancia del servidor | SQL Server 2012 |
Nota:
- En la tabla anterior, la última columna muestra solo la primera compilación que contiene la corrección. Dado que las compilaciones de SQL Server son acumulativas, las compilaciones posteriores, como SQL Server 2014 SP1, contienen esas correcciones. Sin embargo, esas compilaciones no aparecen en la tabla.
- Para obtener más información sobre cómo obtener el Service Pack más reciente para la versión de SQL Server, vea Determinar la versión, la edición y el nivel de actualización. El escenario BCP/Inserción masiva es un escenario común que permanece sin fijar para SQL Server 2008 y SQL Server 2008 R2, y es la causa más probable conocida de lck_ok aserciones en esas versiones. El problema se corrigió por primera vez en SQL Server 2012. El motivo para no corregirlo en las versiones anteriores es que requiere una nueva arquitectura del registro de transacciones de SQL Server interno. Este cambio solo se puede incluir con una versión principal de SQL Server.