Partilhar via


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ópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • transaction_name
    É um nome de transação definido pelo usuário usado para rastrear a transação distribuída em utilitários MS DTC. transaction_name deve estar de acordo com as regras para identificadores e deve ser de <= 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 subseqüentes 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. Para obter mais informações, consulte Usando níveis de isolamento com base em controle de versão de linha.

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 ServidorA, a sessão chamará um procedimento armazenado no ServidorB e outro procedimento armazenado no ServidorC. O procedimento armazenado no ServidorC executará uma consulta distribuída no ServidorD e todos os quatro computadores serão envolvidos na transação distribuída. A instância do Mecanismo de Banco de Dados no ServidorA é 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 AdventureWorks 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 AdventureWorks;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO