Partilhar via


Transações - grupos de disponibilidade e espelhamento de bases de dados

Aplica-se a:SQL Server

Este artigo descreve o suporte a transações interbases de dados e distribuídas para grupos de disponibilidade "Always On" e espelhamento de bases de dados.

Suporte para transações distribuídas

O SQL Server 2017 suporta transações distribuídas para bases de dados em grupos de disponibilidade. Este suporte inclui bases de dados na mesma instância do SQL Server ou bases de dados em diferentes instâncias do SQL Server. Transações distribuídas não são suportadas para bases de dados configuradas para espelhamento de bases de dados.

Observação

SQL Server 2016 (13.x) Service Pack 2 e posteriores fornecem suporte total para transações distribuídas em grupos de disponibilidade.

Nas versões do SQL Server 2016 (13.x) anteriores ao Service Pack 2, transações distribuídas entre bases de dados (ou seja, transações usando bases de dados na mesma instância do SQL Server) envolvendo uma base de dados num grupo de disponibilidade não são suportadas.

Para configurar um grupo de disponibilidade para transações distribuídas, veja Configurar Grupo de Disponibilidade para Transações Distribuídas.

Consulte mais informações em:

SQL Server 2016 SP1 e anteriores: Suporte para transações entre bases de dados dentro da mesma instância do SQL Server

No SQL Server 2016 SP1 e anteriores, transações entre bases de dados dentro da mesma instância do SQL Server não são suportadas para grupos de disponibilidade. Nenhuma base de dados numa transação entre bases de dados pode ser alojada pela mesma instância do SQL Server se uma ou ambas as bases de dados estiverem num grupo de disponibilidade. Esta limitação também se aplica quando essas bases de dados fazem parte do mesmo grupo de disponibilidade.

Transações entre diferentes bases de dados também não são suportadas para espelhamento de bases de dados.

SQL Server 2016 SP1 e anteriores: Suporte para transações distribuídas

As transações distribuídas são suportadas por grupos de disponibilidade quando as bases de dados são alojadas por diferentes instâncias do SQL Server. Também se aplica a transações distribuídas entre instâncias do SQL Server e outros servidores compatíveis com DTC.

O Microsoft Distributed Transaction Coordinator (MSDTC ou DTC) é um serviço Windows que fornece infraestrutura de transações para sistemas distribuídos. O MSDTC permite que aplicações clientes incluam múltiplas fontes de dados numa única transação, que depois é comprometida em todos os servidores incluídos na transação. Por exemplo, pode usar o MSDTC para coordenar transações que abrangem várias bases de dados em diferentes servidores.

O SQL Server 2016 introduz a capacidade de usar transações distribuídas onde uma ou mais bases de dados na transação estão num grupo de disponibilidade. Antes do SQL Server 2016, as transações distribuídas não eram suportadas para bases de dados em grupos de disponibilidade. O SQL Server 2016 pode registar um gestor de recursos por base de dados. Esta nova funcionalidade é a razão pela qual as transações distribuídas podem incluir bases de dados em grupos de disponibilidade.

Devem ser cumpridos os seguintes requisitos:

  • Os grupos de disponibilidade devem estar a correr no Windows Server 2012 R2 ou posterior. Para o Windows Server 2012 R2, você deve instalar a atualização no KB3090973.

  • Os grupos de disponibilidade devem ser criados com o comando CREATE AVAILABILITY GROUP e a cláusula WITH DTC_SUPPORT = PER_DB . Atualmente, não pode alterar um grupo de disponibilidade existente.

  • Todas as instâncias do SQL Server que participam no grupo de disponibilidade devem ser SQL Server 2016 ou posterior.

Não suporte para transações distribuídas

Casos específicos em que as transações distribuídas não são suportadas incluem:

  • No SQL Server 2016 SP1 e anteriores, onde mais do que uma base de dados envolvida na transação está no mesmo grupo de disponibilidade.

  • No SQL Server 2016 SP1 e anteriores, onde pelo menos uma base de dados está num grupo de disponibilidade e outra base de dados está na mesma instância do SQL Server.

  • No caso em que o grupo de disponibilidade não foi criado com a opção de transação distribuída ativada.

  • Espelhamento de banco de dados.

Importante

Determine o resultado padrão apropriado das transações que o DTC não consegue resolver para o seu ambiente. Para informações sobre como configurar o resultado padrão, consulte em dúvida a opção de configuração do servidor de resolução xact.

Exemplo de cenário com espelhamento de base de dados

O exemplo seguinte de espelhamento de base de dados ilustra como pode ocorrer uma inconsistência lógica. Neste exemplo, uma aplicação utiliza uma transação entre bases de dados para inserir duas linhas de dados: uma linha é inserida numa tabela numa base de dados espelhada, A, e a outra linha é inserida numa tabela noutra base de dados, B. A base de dados A está a ser espelhada em modo de alta segurança com failover automático. Enquanto a transação está a ser confirmada, a base de dados A torna-se indisponível, e a sessão de espelhamento passa automaticamente para o espelho da base de dados A.

Após o failover, a transação entre bases de dados pode ser confirmada com sucesso na base de dados B, mas não na base de dados com failover. Por exemplo, se o servidor principal original da base de dados A não tivesse enviado o registo da transação entre bases de dados para o servidor espelho antes da falha. Após o failover, essa transação deixaria de existir no novo servidor principal. As bases de dados A e B tornar-se-iam inconsistentes, porque os dados inseridos na base de dados B permanecem intactos, mas os dados inseridos na base de dados A foram perdidos.

Um cenário semelhante pode ocorrer ao usar uma transação MS DTC. Por exemplo, após o failover, o novo principal contacta o MS DTC. Mas o MS DTC não tem conhecimento do novo servidor principal e termina quaisquer transações que estejam "em preparação para serem confirmadas", que são consideradas confirmadas noutras bases de dados.

Observação

O uso de Espelhamento de Base de Dados com DTC ou o uso de grupos de disponibilidade com DTC de formas não aprovadas neste artigo não é suportado. Isto não implica que aspetos do produto não relacionados com DTC não sejam suportados; no entanto, quaisquer problemas decorrentes do uso indevido de transações distribuídas não são suportados.

Próximos passos

Grupos de Disponibilidade Always On: Interoperabilidade (SQL Server)