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 verificar a integridade estrutural do banco de dados ou reinicie o servidor para garantir que as estruturas de dados na memória não estejam corrompidas.
SPID de Data/Hora Erro: 3624, gravidade: 20, estado: 1.
SPID de Data/Hora Uma verificação 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 verificar se há 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
Acerca das atualizações cumulativas para SQL Server
Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e correções de segurança que estavam na compilação 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 para o SQL Server 2017
atualizações cumulativas mais recentes do SQL Server 2014
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.