Transações distribuídas Transact-SQL
As transações distribuídas iniciadas em Transact-SQL têm uma estrutura relativamente simples:
Uma conexão de um script ou aplicativo Transact-SQL executa uma instrução Transact-SQL que inicia uma transação distribuída.
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.
O script ou aplicativo então executa consultas distribuídas ou então contra servidores vinculados ou procedimentos armazenados remotos contra servidores remotos.
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.
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.