Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
Especifica o início de uma transação Transact-SQL distribuída. Ao utilizar SQL Server, a transação distribuída é gerida pelo Microsoft Distributed Transaction Coordinator (MS DTC).
- No caso do Azure SQL Managed Instance, a transação distribuída é gerida pelo próprio serviço e não pelo MS DTC. Para informações sobre transações distribuídas no Azure SQL Database e Azure SQL Managed Instance, consulte Transações distribuídas em bases de dados cloud.
Transact-SQL convenções de sintaxe
Sintaxe
BEGIN DISTRIBUTED { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ]
[ ; ]
Arguments
transaction_name
É um nome de transação definido pelo utilizador usado para rastrear a transação distribuída dentro das utilidades MS DTC. transaction_name devem cumprir as regras para identificadores e devem ser <= 32 caracteres.
@ tran_name_variable
É o nome de uma variável definida pelo utilizador que contém um nome de transação usado para rastrear a transação distribuída dentro das utilitárias MS DTC. A variável deve ser declarada com um tipo de dados char, varchar, nchar ou nvarchar .
Observações
A instância do Motor de Base de Dados SQL Server que executa a instrução BEGIN DISTRIBUTED TRANSACTION é o originador da transação e controla a conclusão da transação. Quando é emitida uma instrução COMMIT TRANSACTION ou ROLLBACK TRANSACTION subsequente para a sessão, a instância de controlo solicita que o MS DTC gere a conclusão da transação distribuída em todas as instâncias envolvidas.
O isolamento de snapshots ao nível das transações não suporta transações distribuídas.
A principal forma como instâncias remotas do Motor de Base de Dados são integradas numa transação distribuída é quando uma sessão já registada na transação distribuída executa uma consulta distribuída referenciando um servidor ligado.
Por exemplo, se BEGIN DISTRIBUTED TRANSACTION for emitido no ServerA, a sessão chama um procedimento armazenado no ServerB e outro procedimento armazenado no ServerC. O procedimento armazenado no ServerC executa uma consulta distribuída contra o ServerD, e depois os quatro computadores estão envolvidos na transação distribuída. A instância do Motor de Base de Dados no ServerA é a instância de controlo originadora da transação.
As sessões envolvidas em transações distribuídas Transact-SQL não recebem um objeto de transação que possam passar para outra sessão para que esta seja explicitamente incluída na transação distribuída. A única forma de um servidor remoto se inscrever na transação é ser o alvo de uma consulta distribuída ou de uma chamada remota de procedimento armazenado.
Quando uma consulta distribuída é executada numa transação local, a transação é automaticamente promovida a transação distribuída se a fonte de dados OLE DB alvo suportar ITransactionLocal. Se a fonte de dados OLE DB alvo não suportar ITransactionLocal, apenas operações de leitura são permitidas na consulta distribuída.
Uma sessão já registada na transação distribuída realiza uma chamada remota de procedimento armazenado referenciando um servidor remoto.
A sp_configure remote proc trans opção controla se as chamadas para procedimentos armazenados remotos numa transação local causam automaticamente a promoção da transação local para uma transação distribuída gerida pelo MS DTC. A opção SET ao nível da ligação REMOTE_PROC_TRANSACTIONS pode ser usada para sobrescrever o padrão da instância estabelecido por sp_configure remote proc trans. Com esta opção ativada, uma chamada remota de procedimento armazenado faz com que uma transação local seja promovida a transação distribuída. A ligação que cria a transação MS DTC torna-se o originador da transação. COMMIT TRANSACTION inicia um commit coordenado MS DTC. Se a sp_configure remote proc trans opção estiver ATIVADA, chamadas remotas de procedimentos armazenados em transações locais são automaticamente protegidas como parte das transações distribuídas sem necessidade de reescrever aplicações para emitir especificamente INICIAR TRANSAÇÃO DISTRIBUÍDA em vez de INICIAR transação.
Para mais informações sobre o ambiente e processo de transações distribuídas, consulte a documentação do Microsoft Distributed Transaction Coordinator.
Permissions
Requer a participação na função pública.
Examples
Este exemplo elimina um candidato da base de dados AdventureWorks2025 tanto na instância local do Motor de Base de Dados como numa instância num servidor remoto. Tanto as bases de dados locais como as remotas irão fazer commit ou reverter a transação.
Observação
A menos que o MS DTC esteja atualmente instalado no computador que executa a instância do Motor de Base de Dados, este exemplo produz uma mensagem de erro. Para mais informações sobre a instalação do MS DTC, consulte a documentação do Microsoft Distributed Transaction Coordinator.
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