Partilhar via


Criar uma transação distribuída

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Importante

O 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 provedor OLE DB para SQL Server (SQLOLEDB) da Microsoft herdado não são recomendados para desenvolver um novo aplicativo.

Para novos projetos, use um dos seguintes drivers:

Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.

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

O driver ODBC chama o MSDTC para SQL Server local

O MSDTC (Coordenador de Transações Distribuídas da Microsoft) permite que os aplicativos 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 hospedadas em computadores separados.

O MSDTC é instalado para o Microsoft SQL Server local, mas não está disponível para o serviço de nuvem do Banco de Dados SQL do Azure da Microsoft.

O MSDTC é chamado pelo driver SQL Server Native Client para ODBC (Open Database Connectivity), quando o programa C++ gerencia uma transação distribuída. O driver ODBC do Native Client tem um gerenciador de transações compatível com o padrão XA do Open Group Distributed Transaction Processing (DTP). Essa conformidade é exigida pelo MSDTC. Normalmente, todos os comandos de gerenciamento de transações são enviados por meio desse driver ODBC do cliente nativo. Esta é a sequência:

  1. Seu aplicativo ODBC do C++ Native Client inicia uma transação chamando SQLSetConnectAttr, com o modo de confirmação automática desativado.

  2. O aplicativo atualiza alguns dados no SQL Server X no computador A.

  3. O aplicativo 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 confirmadas em ambas as instâncias do SQL Server serão revertidas.
  4. Por fim, o aplicativo encerra a transação chamando SQLEndTran (1), com a opção SQL_COMMIT ou SQL_ROLLBACK.

(1) O MSDTC pode ser invocado sem ODBC. Nesse caso, o MSDTC se torna o gerenciador de transações e o aplicativo não usa mais SQLEndTran.

Apenas uma transação distribuída

Suponha que seu aplicativo ODBC do C++ Native Client esteja inscrito em uma transação distribuída. Em seguida, o aplicativo se inscreve em uma segunda transação distribuída. Nesse caso, o driver ODBC do SQL Server Native Client deixa a transação distribuída original e se inscreve na nova transação distribuída.

Para obter mais informações, consulte Referência do programador DTC.

Alternativa C# para Banco de Dados SQL na nuvem

Não há suporte para o MSDTC no Banco de Dados SQL do Azure ou no Azure Synapse Analytics.

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

Outras linguagens de programação

As outras linguagens de programação a seguir podem não fornecer suporte para transações distribuídas com o serviço Banco de Dados SQL:

  • C++ nativo que usa drivers ODBC
  • Servidor vinculado usando Transact-SQL
  • Drivers JDBC

Confira também

Executando transações (ODBC)