Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Sintomas

Suponha que cria um Grupo de Disponibilidade ao utilizar a cláusula WITH DTC_SUPPORT = PER_DB no Microsoft SQL Server. Quando tenta executar uma inspeção SAVE TRANSACTION numa transação ou procedimentos armazenados do sistema, como sp_executesql, recebe uma das seguintes mensagens de erro:

Msg 627, Nível 16, Estado 0, Número Linha
Não é possível utilizar SAVE TRANSACTION numa transação distribuída.
Msg 12324, Nível 16, Estado 100, Número Linha
As transações distribuídas (DTC) não são suportadas com tabelas otimizadas para memória.
Erro: 3933, Severidade: 16, Estado: 1.
Não é possível promover a transação a uma transação distribuída porque existe um ponto de guardar ativo nesta transação.

Causa

Quando uma base de dados no Grupo De Disponibilidade Always On está ativada para WITH DTC_SUPPORT = PER_DB, desde que uma transação envolva múltiplas bases de dados, a transação é promovida para transação MSDTC no SQL Server 2016 SP2 e SQL Server 2017. Existem limitações nas transações MSDTC. Por exemplo, não é possível utilizar pontos de guardar, as tabelas otimizadas para memória não podem ser utilizadas.

Em algumas situações, as transações entre bases de dados não acontecem porque os utilizadores têm transações que envolvem duas bases de dados de utilizador, mas porque as transações envolvem a base de dados atual e as bases de dados do sistema (principal, tempdb, modelo, base de dados de recursos do sistema). Uma vez que a base de dados de recursos do sistema é na realidade só de leitura, não é necessário promover a transação MSDTC se uma transação entre bases de dados envolver a base de dados de recursos do sistema, mas não outras bases de dados de sistema. 

Resolução

A correção introduzida neste KB ignora a promoção para transação MSDTC se a base de dados de recursos do sistema e uma base de dados de utilizadores que faz parte de um Grupo de Disponibilidade ativado para o PER_DB DTC estiverem envolvidos numa transação entre bases de dados na mesma instância do SQL Server.

Portanto, se a causa original dos erros listados acima for transação entre bases de dados que envolvem bases de dados de recursos do sistema, esta correção irá resolver o problema. Por vezes, o utilizador poderá ver os erros listados acima com a mesma causa subdata. A seguinte lista as condições às quais esta correção se aplica:

  • Uma base de dados faz parte de um Grupo de Disponibilidade Always On ativado WITH DTC_SUPPORT = PER_DB.

  • Uma transação entre bases de dados envolve esta base de dados e a base de dados de recursos do sistema na mesma SQL Server base de dados.

  • Na transação entre bases de dados, é utilizada a função GUARDAR TRANSAÇÃO ou são utilizadas tabelas otimizadas para a memória.

Esta transação falhava com erros listados acima sem esta correção. Com esta correção, essa transação deverá continuar.

Nota: esta correção corrigi endereços com transações entre bases de dados que envolvem a base de dados de recursos do sistema, mas qualquer transação entre bases de dados que envolva bases de dados de utilizadores e que contenha uma inspeção SAVE TRANSACTION continuará a falhar e terá de ser reescrita.

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

Cada nova atualização cumulativa para o SQL Server contém todas as correções de segurança incluídas na atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

Mais Informações

Pode encontrar informações adicionais DTC_SUPPORT = PER_DB, tabelas otimizadas para a memória e GUARDAR TRANSAÇÃO nas seguintes ligações.

As transações de bases de dados na mesma instância SQL Server ligar esta 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 Otimizadas de Memória associam esta parte a
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSAVE TRANSACTION ligue esta parte à 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

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×