Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

Suponha que você crie um Grupo de Disponibilidade usando a cláusula WITH DTC_SUPPORT = PER_DB no Microsoft SQL Server. Ao tentar executar uma instrução SAVE TRANSACTION em uma transação ou procedimentos armazenados do sistema, como sp_executesql, você recebe uma das seguintes mensagens de erro:

Msg 627, Nível 16, Estado 0, Line LineNumber
Não é possível usar SAVE TRANSACTION em uma transação distribuída.
Msg 12324, Nível 16, Estado 100, Line LineNumber
Não há suporte para transações distribuídas (DTC) com tabelas com otimização de memória.
Erro: 3933, Gravidade: 16, Estado: 1.
Não é possível promover a transação para uma transação distribuída porque há um ponto de salvamento ativo nessa transação.

Causa

Quando um banco de dados no grupo de disponibilidade do Always On está habilitado para WITH DTC_SUPPORT = PER_DB, desde que uma transação envolva vários bancos de dados, a transação é promovida para a transação MSDTC no SQL Server 2016 SP2 e SQL Server 2017. Há limitações em transações MSDTC, por exemplo, pontos de salvamento não podem ser usados, tabelas com otimização de memória não podem ser usadas.

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

Resolução

A correção introduzida nesta KB ignora a promoção para a transação MSDTC se o banco de dados de recursos do sistema e um banco de dados de usuário que faz parte de um Grupo de Disponibilidade habilitado para PER_DB DTC estão envolvidos em uma transação entre bancos de dados na mesma instância do SQL Server.

Portanto, se a causa original dos erros listados acima for uma transação entre bancos de dados envolvendo o banco de dados de recursos do sistema, essa correção resolverá isso. Às vezes, o usuário pode ver os erros listados acima com a mesma causa subjacente. O seguinte lista as condições sob as quais essa correção se aplica:

  • Um banco de dados faz parte de um grupo Always On disponibilidade habilitado with DTC_SUPPORT = PER_DB.

  • Uma transação entre bancos de dados envolve esse banco de dados e o banco de dados de recursos do sistema na mesma SQL Server instância.

  • Dentro da transação entre bancos de dados, SAVE TRANSACTION é usado ou tabelas com otimização de memória estão envolvidas.

Essa transação falharia com erros listados acima sem essa correção. Com essa correção, essa transação deve continuar.

Observação: essa correção aborda transações entre bancos de dados que envolvem o banco de dados de recursos do sistema, mas qualquer transação entre bancos de dados que envolva bancos de dados de usuário e contenha uma instrução SAVE TRANSACTION ainda falhará e deverá ser reescrita.

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

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes para SQL Server:

Informações adicionais

Informações adicionais sobre DTC_SUPPORT = PER_DB, tabelas com otimização de memória, SAVE TRANSACTION podem ser encontradas nos links a seguir.

Transações de banco de dados na mesma instância SQL Server vinculam essa parte https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
tabelas com otimizaçãode memória vinculam essa parte a
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationslink SALVAR TRANSAÇÃO esta parte para https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

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 que a Microsoft usa para descrever as atualizações de software.

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×