Explore o MSDTC entre bancos de dados para transações distribuídas em grupos de disponibilidade Always On do SQL Server

Explore o MSDTC entre bancos de dados para transações distribuídas em grupos de disponibilidade Always On do SQL Server

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Nos 18º parte da série SQL Server Always On Availability Group, discutiremos o suporte MSDTC entre bancos de dados em um grupo de disponibilidade.

Neste artigo, aprenderemos os seguintes tópicos:

  • O requisito de MSDTC no SQL Server para transações distribuídas
  • MSDTC para o cluster de failover do Windows
  • MSDTC para Grupo de Disponibilidade Always On do SQL Server
  • Confirmação de duas fases em uma transação distribuída

Um requisito do MSDTC no SQL Server para transações distribuídas

Coordenador de transações distribuídas da Microsoft (popularmente conhecido como MSDTC) é um coordenador para lidar com as transações distribuídas. Uma transação de distribuição envolve dois ou mais bancos de dados em uma única transação.

Suponha que seu aplicativo tenha iniciado uma transação que insere registros em dois bancos de dados db1 e db2 diferentes. Esses bancos de dados existem nos diferentes SQL Servers SQLNode1 e SQLNode2. Sua transação deve ser bem-sucedida se inserir registros em ambos os bancos de dados envolvidos nessa transação, caso contrário, você poderá obter inconsistências de dados. Nesse caso, o MSDTC monitora a transação. Ele monitora a transação distribuída e, se alguma das transações do servidor falhar, ele toma decisões para reverter toda a transação.

Suponha que, uma vez iniciada a transação distribuída, ela tenha inserido um registro no DB1, mas antes de inserir no DB2, devido a uma queda de energia, o DB2 seja encerrado. Esta transação é conhecida como transação incerta. A função do MSDTC é garantir que as transações em dúvida sejam revertidas para confirmadas.

O MSDTC garante e quaisquer transações duvidosas sejam anuladas (revertidas) ou confirmadas (revertidas).

MSDTC no SQL Server para transações distribuídas no grupo de disponibilidade Always On do SQL Server

Você usa transações distribuídas em seu ambiente?

Você pode pensar que eu não uso as transações distribuídas em suas consultas SQL porque você não especifica
INICIAR A TRANSAÇÃO DISTRIBUÍDA para suas instruções SQL. SQL Server DTC para as transações distribuídas para atividades de servidor vinculado, OPENROWSET, OPENQUERY, OPENDATASOURCE e RPC. É um equívoco comum que minha carga de trabalho não use transações distribuídas. Portanto, se você usar servidores vinculados (uso comum), deverá considerar os requisitos de transação distribuída.

Leia Também  Criando pacotes SSIS programaticamente usando EzAPI

MSDTC para o cluster de failover do Windows

Você pode ver o serviço agrupado MSDTC em um cluster de failover do Windows junto com o SQL Service. A partir do Windows 2008, não é obrigatório configurar o MSDTC para construir um cluster. No entanto, se você instalar o MSDTC em um cluster de failover, será necessário especificar o endereço IP do recurso DTC e o armazenamento compartilhado.

https://techcommunity.microsoft.com/t5/sql-server-support/msdtc-recommendations-on-sql-failover-cluster/ba-p/318037

Em um cluster de failover, podemos ter o MSDTC local ou o DTC em cluster. Suponha que você tenha um DTC agrupado para transações distribuídas. Na imagem abaixo, temos as funções SQL e MSDTC no Nó1. Normalmente, você deve ter a função MSDTC no mesmo nó onde existe sua função SQL.

Agora, suponha que você desligue o nó ativo SQLNode1, isso faz com que seus recursos SQL e MSDTC façam failover de SQLNode1 para SQLNode2. O MSDTC mantém seu log na unidade compartilhada e também faz failover para o novo nó primário. Nesse caso, o MSDTC pode usar o log e manipular as transações em dúvida.

MSDTC para o cluster de failover do Windows

Caso você não configure o MSDTC no cluster de failover, o SQL Server usa o MSDTC executado localmente no nó. É um pouco complicado porque o log do MSDTC não está disponível no caso, um dos nós não está disponível.

MSDTC local no grupo de disponibilidade Always On do SQL Server

Suponha que o node1 falhe (desligue) e cause failover do recurso SQL para o node2. Nesse caso, node1 tem uma transação com falha em dúvida. Para resolver a transação, o node2 MSDTC tenta contatar o node1 para verificar o status da transação. Se puder entrar em contato com o node1 MSDTC, ele executará ações de acordo com os logs. Caso contrário, ele usa o valor configurado no configuração do SQL Server de resolução exata em dúvida. Podemos configurar os valores usando o procedimento armazenado do sistema sp_configure.

Possui as seguintes três configurações:

  • : É a configuração padrão. Nesse caso, a recuperação falha e o MSDTC não pode resolver nenhuma transação duvidosa. Esta opção é conhecida como Sem presunção. Se usarmos a configuração padrão, o SQL Server não poderá resolver a transação duvidosa e o banco de dados entrará no modo suspeito. Você precisa eliminar manualmente a transação do gerenciador de transações distribuídas e colocar o banco de dados no estado online
  • 1: Presume-se que as transações em dúvida foram confirmadas
  • 2: Presume-se que as transações em dúvida foram abortadas
  • Nota: Você pode consultar esta documentação para obter mais informações sobre as opções de configurações do servidor

MSDTC para grupos de disponibilidade Always On do SQL Server

Na configuração sempre ativa do SQL Server, usamos a base de cluster de failover para um grupo de disponibilidade.

Leia Também  Introdução ao mecanismo de pesquisa Sphinx

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
  • SQL Server 2014: Você não pode usar o MSDTC para uma transação distribuída em um grupo de disponibilidade
  • SQL Server 2016: Suporta transações entre bancos de dados se esses bancos de dados estiverem em instâncias máquinas diferentes. Se uma transação distribuída usa vários bancos de dados em uma instância SQL, não podemos usar o MSDTC. É aplicável a bancos de dados de grupo de disponibilidade também
  • SQL Server 2016 SP2: Suporta transações entre bancos de dados, mesmo se ambos os bancos de dados existirem em uma instância. Ele também funciona em bancos de dados de instâncias cruzadas e transações distribuídas

Isso significa que o SQL Server não permite transações distribuídas no SQL Server 2016 ou anterior? Não, o SQL não para as transações distribuídas para bancos de dados AG, mesmo que não esteja configurado para as transações distribuídas. Nesses casos, quando ocorre o failover do AG, o SQL Server pode não recuperar o banco de dados na nova réplica do AG. Portanto, você deve configurar o MSDTC para uma transação distribuída em um SQL Server Always On Availability Groups.

  • Nota: O DTC não altera o comportamento do commit de dados síncrono e assíncrono

Confirmação de duas fases em uma transação distribuída

O SQL Server usa o protocolo de confirmação de duas fases para a transação de distribuição, uma vez que o usuário emite uma instrução de confirmação. Antes de explicar o two phase-commit, vamos entender a terminologia usada aqui.

  • Gerenciador de transações: o MSDTC atua como um gerenciador de transações para transações distribuídas
  • Gerenciador de recursos: cada instância SQL funciona como um gerenciador de recursos. Em um cluster de dois nós, temos dois gerenciadores de recursos de ambas as instâncias SQL
Leia Também  Scripts T-SQL para copiar ou remover arquivos de um diretório no SQL Server 2019

O processo two-phase commit usa as seguintes fases, conforme mostrado abaixo:

Confirmação de duas fases em uma transação distribuída para SQL Server Always On Availability Group

  • Fase de preparação: Nesta fase, o gerenciador de transações recebe a solicitação de confirmação e, portanto, envia o comando de preparação para todos os gerenciadores de recursos. Conforme destacado anteriormente, o gerenciador de recursos é a instância SQL. O gerenciador de recursos grava as transações no disco e executa a tarefa para torná-lo durável. Ele responde à mensagem de sucesso ou falha para o gerenciador de transações
  • Fase de confirmação: Se ambos os gerenciadores de recursos enviarem a mensagem preparada com sucesso para o gerenciador de transações, ele emitirá um comando de confirmação para ambos os gerenciadores de recursos. Depois que o gerenciador de recursos confirma os registros na instância SQL, ele envia novamente uma confirmação. Com as duas confirmações de confirmação, o SQL Server responde ao aplicativo sobre a confirmação bem-sucedida. No caso de qualquer gerenciador de recursos relatar uma mensagem de falha, o gerenciador de transações envia o comando para reverter a transação em cada gerenciador de recursos. Ele também envia a mensagem para o aplicativo para a transação de rollback
  • Nota: Se um usuário emitir um comando de transação de rollback, o gerenciador de transação imediatamente aborta a transação e dá instruções para reverter o trabalho feito até agora

Conclusão

Neste artigo, entendemos o conceito de Coordenador de transações distribuídas da Microsoft (MSDTC)
no SQL Server e sua integração com o SQL Server Always On Availability Group. No próximo artigo, configuraremos um Grupo de Disponibilidade Always On do SQL Server para usar o MSDTC.

Índice

Rajendra Gupta
Últimos posts de Rajendra Gupta (ver tudo)

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br