BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Especifica o início de uma transação distribuída Transact-SQL gerenciada pelo MS DTC (Coordenador de Transações Distribuídas da Microsoft).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

BEGIN DISTRIBUTED { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable ] 
[ ; ]

Argumentos

  • transaction_name
    É o nome de uma transação definida pelo usuário usada para rastrear transação distribuída em utilitários MS DTC. transaction_name deve obedecer às regras de identificadores e deve ser <= 32 caracteres.

  • @tran\_name\_variable
    É o nome de uma variável definida pelo usuário que contém um nome de transação usado para rastrear transação distribuída em utilitários MS DTC. A variável deve ser declarada com um tipo de dados char, varchar, nchar ou nvarchar.

Comentários

A instância do Mecanismo de Banco de Dados do SQL Server que executa a instrução BEGIN DISTRIBUTED TRANSACTION é a originadora da transação e controla a conclusão da transação. Quando as instruções subsequentes COMMIT TRANSACTION ou ROLLBACK TRANSACTION são emitidas para a sessão, a instância controladora solicita que o MS DTC gerencie a conclusão da transação distribuída em todas as instâncias envolvidas.

O isolamento de instantâneo em nível de transação não oferece suporte a transações distribuídas.

A principal forma pela qual as instâncias remotas do Mecanismo de Banco de Dados são inscritas em uma transação distribuída é quando uma sessão já inscrita na transação distribuída executa uma consulta distribuída que faz referência a um servidor vinculado.

Por exemplo, se BEGIN DISTRIBUTED TRANSACTION for emitido no ServerA, a sessão chamará um procedimento armazenado no ServerB e outro procedimento armazenado no ServerC. O procedimento armazenado no ServerC executará uma consulta distribuída no ServerD e os quatro computadores serão envolvidos na transação distribuída. A instância do Mecanismo de Banco de Dados no ServerA é a instância controladora de origem para a transação.

As sessões envolvidas em transações distribuídas de Transact-SQL não obtêm um objeto de transação que elas possam passar para outra sessão, de modo que ele possa ser inscrito explicitamente na transação distribuída. O único modo para um servidor remoto se inscrever na transação é sendo o destino de uma consulta distribuída ou de uma chamada de procedimento armazenado remoto.

Quando uma consulta distribuída é executada em uma transação local, a transação é promovida automaticamente a uma transação distribuída se a fonte de dados OLE DB de destino oferecer suporte a ITransactionLocal. Se a fonte de dados OLE DB de destino não oferecer suporte a ITransactionLocal, apenas operações somente leitura serão permitidas na consulta distribuída.

Uma sessão já inscrita na transação distribuída executa uma chamada de procedimento armazenado remoto fazendo referência a um servidor remoto.

A opção sp_configure remote proc trans controla se as chamadas para procedimentos armazenados remotos em uma transação local fazem com que a transação local seja automaticamente promovida a uma transação distribuída gerenciada pelo MS DTC. A opção SET em nível de conexão REMOTE_PROC_TRANSACTIONS pode ser usada para substituir o padrão da instância estabelecido por sp_configure remote proc trans. Com essa opção definida, uma chamada de procedimento armazenado remoto faz com que uma transação local seja promovida a uma transação distribuída. A conexão que cria a transação do MS DTC se torna originadora da transação. COMMIT TRANSACTION inicia uma confirmação coordenada do MS DTC. Se a opção sp_configure remote proc trans estiver ON, as chamadas de procedimento armazenado remoto em transações locais serão protegidas automaticamente como parte das transações distribuídas sem que seja necessário regravar aplicativos para emitir especificamente BEGIN DISTRIBUTED TRANSACTION em vez de BEGIN TRANSACTION.

Para obter mais informações sobre o ambiente e o processo de transação distribuída, consulte a documentação do Coordenador de Transações Distribuídas da Microsoft.

Permissões

Requer associação na função public.

Exemplos

Esse exemplo exclui um candidato do banco de dados AdventureWorks2012 tanto na instância local do Mecanismo de Banco de Dados, quanto na instância de um servidor remoto. Ambos os bancos de dados locais e remotos confirmarão ou reverterão a transação.

ObservaçãoObservação

A menos que o MS DTC esteja instalado atualmente no computador que executa a instância do Mecanismo de Banco de Dados. Esse exemplo emitirá uma mensagem de erro. Para obter mais informações sobre a instalação do MS DTC, consulte a documentação do Coordenador de Transações Distribuídas da Microsoft.

USE AdventureWorks2012;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2012.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2012.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO

Consulte também

Referência

BEGIN TRANSACTION (Transact-SQL)

COMMIT TRANSACTION (Transact-SQL)

COMMIT WORK (Transact-SQL)

ROLLBACK TRANSACTION (Transact-SQL)

ROLLBACK WORK (Transact-SQL)

SAVE TRANSACTION (Transact-SQL)