Sintomas
Assuma que tem pelo menos um Grupo de Disponibilidade AlwaysOn com DTC_SUPPORT=PER_DB no Microsoft SQL Server 2016 ou 2017. Se executar um gatilho do SQL Server que contenha uma transação de base de dados cruzada envolvendo pelo menos uma das bases de dados do Grupo Availability, poderá ocorrer uma falha de afirmação. O registo de erros do SQL Server reporta as seguintes mensagens de falha de afirmação:
DateTime spid20s * **********************************************************************************************************************************************************************************************************************************DataTime spid20s * BEGIN STACK DUMP:DateTime spid20s * Localização: FileName:3880DateTime spid20s * Expressão: m_state == BaseXact::XACT_PREPARED [ m_state == BaseXact::XACT_COMMITTEDDateTime spid20s * SPID: 20
DataTime spid20s Error: 17066, Severidade: 16, Estado: 1.DataTime spid20s SQL Server Afirmação: Arquivo: <FileName>, linha=LineNumber Failed Assertion = 'm_state == BaseXact::XACT_PREPARED ] m_state == BaseXact::XACT_COMMITTED'. Este erro pode estar relacionado com o tempo. Se o erro persistir após a reprodução da declaração, utilize o DBCC CHECKDB para verificar se existe integridade estrutural ou reinicie o servidor para garantir que as estruturas de dados na memória não sejam corrompidas.DataTime spid20s Error: 3624, Severity: 20, State: 1.DataTime spid20s Uma verificação de afirmação do sistema falhou. Verifique o registo de erros do SQL Server para obter mais detalhes. Normalmente, uma falha de afirmação é causada por um bug de software ou corrupção de dados. Para verificar se existe corrupção na base de dados, considere executar o DBCC CHECKDB. Se concordar em enviar despejos para a Microsoft durante a configuração, será enviada uma mini lixeira para a Microsoft. Uma atualização pode estar disponível da Microsoft no mais recente Pack de Serviços ou num Hotfix de Suporte Técnico.
Além disso, poderá receber uma mensagem de erro que se assemelhe ao seguinte:
Erro do servidor DateTime: 19407, Severidade: 16, Estado: 1.
Servidor DateTime O locação entre o grupo de disponibilidade 'GroupName' e o Windows Server Failover Cluster expirou. Ocorreu um problema de conectividade entre a instância do SQL Server e o Windows Server Failover Cluster. Para determinar se o grupo de disponibilidade está a falhar corretamente, verifique o recurso de grupo de disponibilidade correspondente no Cluster de Falha do Servidor do Windows.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Resolução
Informação de atualização cumulativa:
Esta emissão é corrigida nas seguintes atualizações cumulativas para o SQL Server:
Sobre as 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 que foram incluídas com a atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:
Informação sobre hotfix a pedido:
Esta emissão é corrigida nos seguintes hotfixes a pedido para o SQL Server:
Referências
Conheça o terminologia que a Microsoft usa para descrever atualizações de software.