Síntomas
Puede producirse un error de aserción cuando Microsoft SQL Server ejecuta repetidamente un procedimiento almacenado que realiza lo siguiente:
- Toma un objeto grande, como varchar(max) o varbinary(max), como un argumento y
- Crea una tabla temporal con ámbito de ejecución del procedimiento y
- Usa el argumento de objeto grande de la tabla temporal.
Es posible que encuentre el error de aserción similar al siguiente en el registro de errores de SQL Server:
SPID de fecha y hora Error: 17065, Gravedad: 16, Estado: 1.
Date/Time SPID SQL Server Assertion: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Attempt to access expired blob handle (1). Este error puede estar relacionado con los intervalos. Si el error persiste después de reenviar 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.
SPID de fecha y hora Error: 3624, Gravedad: 20, Estado: 1.
SPID de fecha y hora Se ha producido un error en una comprobación de aserción del sistema. Compruebe el registro de errores SQL Server para obtener más información. Normalmente, un error de aserción se debe a un error de software o a daños en los datos. Para comprobar si hay daños en la base de datos, considere la posibilidad de ejecutar DBCC CHECKDB. Si aceptaste enviar volcados a Microsoft durante la instalación, se enviará un mini volcado a Microsoft. Una actualización puede estar disponible de Microsoft en el Service Pack más reciente o en una revisión del soporte técnico.
Causa
SQL Server tiene lógica interna para deshabilitar el almacenamiento en caché de las consultas que hacen referencia a objetos grandes para que las ejecuciones posteriores no hagan referencia a esos LOB (que se crearon durante ejecuciones anteriores y, por tanto, no son válidas para las ejecuciones posteriores). Esa lógica no controló el caso de la Resolución de nombres diferidos (DNR) en las tablas temporales que provocaron que esos planes se almacenaran en caché. Las tablas temporales de ámbito son costosas de crear y SQL Server las almacena en caché para volver a usarlas en ejecuciones posteriores. Esto evita la recompilación de este tipo de consultas debido a cambios de esquema.
Obtenga más información sobre la Resolución de nombres diferida.
Resolución
Este problema se ha corregido en las siguientes actualizaciones acumulativas para SQL Server:
Actualización acumulativa 8 para SQL Server 2016 SP1
Actualización acumulativa 4 de SQL Server 2017
Actualización acumulativa 10 de SQL Server 2014 Service Pack 2
Acerca de las actualizaciones acumulativas para SQL Server
Cada nueva actualización acumulativa de SQL Server contiene todas las revisiones y correcciones de seguridad que se encontraban en la compilación anterior. Echa un vistazo a la actualización acumulativa más reciente de SQL Server:
Actualización acumulativa más reciente de SQL Server 2016
Actualización acumulativa más reciente de SQL Server 2017
actualizaciones acumulativas más recientes para SQL Server 2014
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Referencias
Obtén información sobre la terminología que Microsoft usa para describir las actualizaciones de software.