Transações distribuídas Transact-SQL

As transações distribuídas iniciadas em Transact-SQL têm uma estrutura relativamente simples:

  1. Uma conexão de um script ou aplicativo Transact-SQL executa uma instrução Transact-SQL que inicia uma transação distribuída.

  2. A instância do Mecanismo de banco de dados do SQL Server que executa a instrução se torna o servidor controlador na transação.

  3. O script ou aplicativo então executa consultas distribuídas ou então contra servidores vinculados ou procedimentos armazenados remotos contra servidores remotos.

  4. A medida que as chamadas de procedimento remotas e consultas distribuídas são feitas, o servidor controlador chama automaticamente o MS DTC (Coordenador de Transações Distribuídas da Microsoft) para se inscrever nos servidores remotos e vinculados na transação distribuída.

  5. Quando um script ou aplicativo emite uma instrução COMMIT ou ROLLBACK, a instância controladora do SQL Server chama o MS DTC para gerenciar o processamento do protocolo 2PC, ou para notificar aos servidores remotos e vinculados que revertam suas transações.

Instruções Transact-SQL Requeridas

As instruções Transact-SQL que controlam as transações distribuídas são poucas pois a maior parte do trabalho é feita internamente pelo Mecanismo de banco de dados do SQL Server e MS DTC. As únicas instruções Transact-SQL requeridas no script ou aplicativos Transact-SQL são aqueles requeridos para:

  • Iniciar uma transação distribuída.

  • Execute consultas distribuídas contra servidores vinculados ou execute chamadas de procedimento remotas contra servidores remotos.

  • Chame as instruções Transact-SQL COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION, ou ROLLBACK WORK para completar a transação.

    Para qualquer transação distribuída Transact-SQL , a instância do Mecanismo de Banco de Dados processando o script ou conexão Transact-SQL chama automaticamente o MS DTC para coordenar a confirmação ou reversão da transação.

Iniciando transações distribuídas.

Você pode iniciar transações distribuídas no Transact-SQL das seguintes formas:

  • Inicie uma transação distribuída explícita utilizando a instrução BEGIN DISTRIBUTED TRANSACTION.

    Você pode também executar uma consulta distribuída em um servidor vinculado. A instância do Mecanismo de Banco de Dados que você conectou para chamar o MS DTC para gerenciar a transação distribuída com o servidor vinculado. Você também pode chamar procedimentos armazenados remotos em uma instância remota do Mecanismo de Banco de Dados como parte da transação distribuída.

  • Enquanto estiver em uma transação local, execute uma consulta distribuída.

    Se a fonte de dados OLE DB oferecer suporte a interface ITransactionJoin , a transação é promovida para uma transação distribuída, mesmo se a consulta é uma consulta somente leitura. Se a fonte de dados não oferecer suporte a ITransactionJoin, apenas instruções somente leitura serão permitidas.

  • Se SET REMOTE_PROC_TRANSACTIONS ON tenha sido executado, e uma transação local chamar um procedimento de armazenamento remoto em outra instância do Mecanismo de Banco de Dados, a transação local é promovida para transação distribuída.

    O Mecanismo de Banco de Dados usa o MS DTC para coordenar a transação com o servidor remoto. Chama os procedimentos armazenados remotos para executarem fora do escopo de uma transação local se REMOTE_PROC_TRANSACTIONS for definido como OFF. O trabalho feito pelo procedimento remoto não será revertido se a transação local for revertida. O trabalho realizado pelo procedimento de armazenamento remoto é confirmado no momento que o procedimento é concluído, não quando a transação local é confirmada.

A opção REMOTE_PROC_TRANSACTIONS é uma opção de compatibilidade que afeta apenas chamadas de procedimentos armazenados remotos feitas para servidores remotos definidos com o uso do sp_addserver. A opção não se aplica a consultas distribuídas que executam um procedimento armazenado em um servidor vinculado definido com o uso do sp_addlinkedserver. Para obter mais informações sobre consultas distribuídas, consulte Consultas distribuídas.