Criar uma transação distribuída

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse Analytics

Importante

SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .

Uma transação distribuída pode ser criada para diferentes sistemas Microsoft SQL de diferentes formas.

O driver ODBC chama o MSDTC para o SQL Server on-premises

O Coordenador de Transações Distribuídas da Microsoft (MSDTC) permite que aplicações estendam ou distribuam uma transação em duas ou mais instâncias do SQL Server. A transação distribuída funciona mesmo quando as duas instâncias estão alojadas em computadores separados.

O MSDTC está instalado para Microsoft SQL Server on-premises, mas não está disponível para o serviço cloud Base de Dados SQL do Azure da Microsoft.

O MSDTC é chamado pelo driver SQL Server Native Client for Open Database Connectivity (ODBC), quando o seu programa C++ gere uma transação distribuída. O driver ODBC do Native Client tem um gestor de transações que está em conformidade com o padrão XA Open Group Distributed Transaction Processing (DTP). Esta conformidade é exigida pela MSDTC. Normalmente, todos os comandos de gestão de transações são enviados através deste driver ODBC do Cliente Nativo. A sequência é a seguinte:

  1. A sua aplicação ODBC Native Client C++ inicia uma transação chamando SQLSetConnectAttr, com o modo autocommit desligado.

  2. A aplicação atualiza alguns dados no SQL Server X no computador A.

  3. A aplicação atualiza alguns dados no SQL Server Y no computador B.

    • Se uma atualização no SQL Server Y falhar, todas as atualizações não comprometidas em ambas as instâncias do SQL Server são revertidas.
  4. Finalmente, a aplicação termina a transação chamando SQLEndTran (1), com a opção SQL_COMMIT ou SQL_ROLLBACK.

(1) A MSDTC pode ser invocada sem ODBC. Nesse caso, o MSDTC torna-se o gestor de transações, e a aplicação deixa de usar SQLEndTran.

Apenas uma transação distribuída

Suponha que a sua aplicação ODBC Native Client C++ está registada numa transação distribuída. De seguida, a aplicação inscreve-se numa segunda transação distribuída. Neste caso, o driver ODBC do SQL Server Native Client sai da transação distribuída original e inscreve-se na nova transação distribuída.

Para mais informações, consulte a Referência do Programador DTC.

Alternativa a C# para base de dados SQL na cloud

O MSDTC não é suportado nem para Base de Dados SQL do Azure nem para Azure Synapse Analytics.

No entanto, uma transação distribuída pode ser criada para a base de dados SQL fazendo com que o seu programa C# utilize a classe .NET System.Transactions.TransactionScope.

Outras linguagens de programação

As seguintes outras linguagens de programação podem não fornecer suporte para transações distribuídas com o serviço SQL Database:

  • C++ nativo que usa drivers ODBC
  • Servidor ligado usando Transact-SQL
  • Pilotos JDBC