BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Especifica o início de uma transação distribuída do Transact-SQL. Ao usar o SQL Server, a transação distribuída é gerenciada pelo MS DTC (Coordenador de Transações Distribuídas da Microsoft).
- No caso da Instância Gerenciada de SQL do Azure, a transação distribuída é gerenciada pelo próprio serviço, e não pelo MS DTC. Para obter informações sobre transações distribuídas no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, confira Transações distribuídas entre bancos de dados de nuvem.
Convenções de sintaxe de 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 precisa estar em conformidade com as regras para identificadores e ter < igual a 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 precisa ser declarada com o 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 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 for executada em uma transação local, a transação será promovida automaticamente a uma transação distribuída se a fonte de dados OLE DB de destino for compatível com ITransactionLocal. Se a fonte de dados OLE DB de destino não for compatível com 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 no nível da 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 reescrever os 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 à função public.
Exemplos
Esse exemplo exclui um candidato do banco de dados AdventureWorks2022 tanto na instância local do Mecanismo de Banco de Dados, quanto na instância em um servidor remoto. Ambos os bancos de dados locais e remotos confirmarão ou reverterão a transação.
Observaçã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 AdventureWorks2022;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO