Sintomas
Suponha que você tenha pelo menos um Grupo de Disponibilidade AlwaysOn com DTC_SUPPORT=PER_DB no Microsoft SQL Server 2016 ou 2017. Se você executar um gatilho do SQL Server que contenha uma transação entre bancos de dados envolvendo pelo menos um dos bancos de dados do Grupo de Disponibilidade, poderá ocorrer uma falha de asserção. O log de erros do SQL Server relata as seguintes mensagens de falha de asserção:
DateTime spid20s * *******************************************************************************
DateTime spid20s * BEGIN STACK DUMP:
DateTime spid20s * Local: FileName:3880
DateTime spid20s * Expressão: m_state == BaseXact::XACT_PREPARED || m_state == BaseXact::XACT_COMMITTED
Data/hora spid20s * SPID: 20
Erro DateTime spid20s: 17066, Severidade: 16, Estado: 1.
DateTime spid20s SQL Server Assertion: File: <FileName>, line=LineNumber Failed Assertion = 'm_state == BaseXact::XACT_PREPARED || m_state == BaseXact::XACT_COMMITTED'. Esse erro pode estar relacionado ao tempo. Se o erro persistir após a execução da instrução, use DBCC CHECKDB para marcar 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 DateTime spid20s: 3624, Severidade: 20, Estado: 1.
DateTime spid20s Uma verificação de marca de asserção do sistema falhou. Verifique o log de erros do SQL Server para obter detalhes. Normalmente, uma falha de declaração é causada por um bug de software ou corrupção de dados. Para marcar se há banco de dados corrompido, considere executar DBCC CHECKDB. Se você concordou em enviar despejos para a Microsoft durante a instalação, um minidespejo será enviado para a Microsoft. Uma atualização pode estar disponível da Microsoft no Service Pack mais recente ou em um hotfix do Suporte Técnico.
Além disso, a seguinte mensagem de erro semelhante à seguinte pode ser exibida:
Data/Hora Erro do servidor: 19407, gravidade: 16, estado: 1.
Data/Hora Servidor: A concessão entre o grupo de disponibilidade "GroupName" e o Cluster de Failover do Windows Server expirou. Ocorreu um problema de conectividade entre a instância do SQL Server e o Cluster de Failover do Windows Server. Para determinar se o grupo de disponibilidade está fazendo failover corretamente, marque o recurso do grupo de disponibilidade correspondente no Cluster de Failover do Windows Server.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Resolução
Informações sobre a atualização cumulativa:
Esse problema é corrigido nas seguintes atualizações cumulativas para o SQL Server:
- Atualização cumulativa 14 para o SQL Server 2017
- Atualização cumulativa 5 para o SQL Server 2016 SP2
Sobre atualizações cumulativas para o SQL Server:
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para o SQL Server:
- Atualização cumulativa mais recente do SQL Server 2017
- Atualização cumulativa mais recente do SQL Server 2016
Informações sobre o hotfix sob demanda:
Esse problema é corrigido nos seguintes hotfixes sob demanda para o SQL Server:
Referências
Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.