CORREÇÃO: Erros 627 ou 12324 ocorrer quando várias transações de banco de dados são promovidos para transações distribuídas no grupo de disponibilidade do SQL Server

Aplica-se a: SQL Server 2016 DeveloperSQL Server 2016 EnterpriseSQL Server 2016 Enterprise Core

Sintomas


Suponha que você crie um grupo de disponibilidade usando a cláusula com DTC_SUPPORT = PER_DB no Microsoft SQL Server. Quando você tenta executar uma instrução SAVE TRANSACTION em uma transação ou procedimentos armazenados do sistema como sp_executesql,você receber uma das seguintes mensagens de erro:

Motivo


Quando um banco de dados sempre no grupo de disponibilidade é habilitado para com DTC_SUPPORT = PER_DB, enquanto uma transação envolve vários bancos de dados, a transação é promovido a transação MSDTC no SP2 de 2016 do SQL Server e SQL Server 2017. Há limitações nas transações MSDTC, por exemplo pontos de salvamento não podem ser usados, tabelas de memória otimizada não podem ser usadas.

Em algumas situações transações de banco de dados entre acontecem não porque os usuários têm transações envolvendo dois bancos de dados do usuário, mas porque as transações envolvem o banco de dados atual e bancos de dados do sistema (mestre, tempdb, modelo, recursos do sistema banco de dados). Como o banco de dados de recursos de sistema é realmente somente leitura, é não necessária para promover a transação MSDTC se envolve uma transação de banco de dados entre o sistema banco de dados de recursos, mas não outros bancos de dados do sistema.

Resolução


A correção apresentada neste KB ignora a promoção a transação MSDTC se o banco de dados de recursos de sistema e um banco de dados do usuário que é parte de um grupo de disponibilidade habilitada para PER_DB DTC estão envolvidos em uma transação de banco de dados de distribuição dentro da mesma instância do SQL Server.

Portanto, se a causa original dos erros listados acima estiver entre transações envolvendo sistema recurso banco de dados, essa correção será solucioná-lo. Às vezes, o usuário pode ver os erros listados acima com a mesma causa subjacente. A seguinte lista as condições em que essa correção se aplica:

  • Um banco de dados é parte de um sempre no grupo de disponibilidade habilitado com DTC_SUPPORT = PER_DB.
  • Uma transação de banco de dados de distribuição envolve o banco de dados e o banco de dados de recursos do sistema na mesma instância do SQL Server.
  • Dentro da transação de banco de dados cruzado, SAVE TRANSACTION é usado ou memória otimizada tabelas envolvidas.

Tal transação falhará com erros listados acima sem esta correção. Com essa correção, essa transação deve prosseguir.

Observação: essa transações de bancos de dados de endereços correção que envolvem o banco de dados de recursos do sistema, mas qualquer transação entre bancos de dados que envolve a bancos de dados do usuário e contém uma instrução SAVE TRANSACTION ainda irá falhar e deve ser reescrita.

Esse problema é corrigido na atualização cumulativa seguinte para SQL Server:

Atualização cumulativa 7 para SQL Server 2017

Atualização cumulativa 1 para SQL Server 2016 SP2

Status


A Microsoft confirmou que este é um problema nos produtos Microsoft que estão listados na seção "Aplicável a".

Referências


Conheça a terminologia que a Microsoft usa para descrever as atualizações de software.