Sintomas
Um erro de asserção pode ocorrer quando o Microsoft SQL Server executa repetidamente um procedimento armazenado que executa o seguinte:
-
Usa um objeto grande, como varchar (max) ou varbinary (max), como um argumento e
-
Cria uma tabela temporária que tem o escopo para a execução do procedimento e
-
Usa o argumento objeto grande na tabela temporária.
Você pode encontrar o erro de asserção semelhante ao seguinte no log de erros do SQL Server:
ErroSPID de data/hora: 17065, severidade: 16, estado: 1.
Data/hora Declaração SPID do SQL Server: arquivo: FilePath \filename, line = LineNumber falhou Assertion = ' fFalse ' tentativa de acessar o identificador de blob expirado (1). Este erro pode estar relacionado ao tempo. Se o erro persistir após a reexecução da 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 sejam corrompidas.
Erro SPID de data/hora : 3624, severidade: 20, estado: 1.
Data/hora doSPID uma verificação de asserção do sistema falhou. Verifique o log de erros do SQL Server para obter detalhes. Geralmente, uma falha de asserção é causada por um bug de software ou corrupção de dados. Para verificar se há corrupção do banco de dados, considere executar DBCC CHECKDB. Se você concordou em enviar despejos para a Microsoft durante a instalação, um mini despejo será enviado à Microsoft. Uma atualização pode estar disponível na Microsoft no Service Pack mais recente ou em um hotfix do suporte técnico.
Causa
O SQL Server tem lógica interna para desabilitar o cache de consultas que fazem referência a objetos grandes para que as 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 manipulava o caso da resolução de nomes adiada (DNR) em tabelas temporárias que fizeram com que esses planos sejam armazenados em cache. Tabelas temporárias com escopo são caras de criar, e o SQL Server os armazena em cache para reutilização em execuções subsequentes. Isso impede a recompilação de tais consultas devido às alterações de esquema.
Saiba mais sobre a resolução de nomes adiada.
Resolução
Esse problema foi corrigido nas seguintes atualizações cumulativas do 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
Cada nova atualização cumulativa do 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 do SQL Server:
Atualização cumulativa mais recente do 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 Microsoft listados na seção "Aplicável a".
Referências
Saiba mais sobre a terminologia usada pela Microsoft para descrever atualizações de software.