Sintomas
Pode ocorrer um erro de asserção quando o Microsoft SQL Server executa repetidamente um procedimento armazenado que executa o seguinte:
- Toma um objeto grande, como varchar(max) ou varbinary(max), como um argumento e
- Cria uma tabela temporária com o âmbito da execução do procedimento e
- Utiliza o argumento objeto grande na tabela temporária.
Poderá encontrar um erro de asserção semelhante ao seguinte no registo de erros SQL Server:
SPID de Data/Hora Erro: 17065, gravidade: 16, estado: 1.
Data/Hora SPID SQL Server Assertion: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Tentativa de acessar o identificador de blob expirado (1). Este erro pode estar relacionado com a temporização. Se o erro persistir depois de executar novamente a instrução, use DBCC CHECKDB para marcar o banco de dados para integridade estrutural ou reinicie o servidor para garantir que as estruturas de dados na memória não sejam corrompidas.
SPID de Data/Hora Erro: 3624, gravidade: 20, estado: 1.
SPID de Data/Hora Um marcar de asserção do sistema falhou. Consulte o registo de erros SQL Server para obter detalhes. Normalmente, uma falha de asserção é causada por um bug de software ou corrupção de dados. Para marcar para danos no banco de dados, considere executar DBCC CHECKDB. Se concordou em enviar informações de perda para a Microsoft durante a configuração, será enviada uma minicaptura para a Microsoft. Pode estar disponível uma atualização da Microsoft no Service Pack mais recente ou numa Correção do Suporte Técnico.
Causa
SQL Server tem lógica interna para desabilitar o cache de consultas que fazem referência a objetos grandes para que execuções subsequentes não façam referência a esses LOBs (que foram criados durante execuções anteriores e, portanto, são inválidos para execuções subsequentes). Essa lógica não lidava com o caso da DNR (Resolução de Nome Diferido ) em tabelas temporárias que faziam com que esses planos fossem colocados em cache. A criação de tabelas temporárias com escopo é dispendiosa e SQL Server as armazena em cache para reutilização em execuções subsequentes. Isto impede a recompilação de tais consultas devido a alterações de esquema.
Saiba mais sobre a Resolução de Nome Diferido.
Resolução
Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:
Atualização cumulativa 8 para SQL Server 2016 SP1
Atualização cumulativa 4 para SQL Server 2017
Atualização cumulativa 10 para SQL Server 2014 Service Pack 2
Sobre atualizações cumulativas para o SQL Server
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e correções de segurança que estavam no build anterior. Confira a atualização cumulativa mais recente para SQL Server:
Atualização cumulativa mais recente para o SQL Server 2016
Atualização cumulativa mais recente do SQL Server 2017
atualizações cumulativas mais recentes do SQL Server 2014
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.