Condividi tramite


BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Specifica l'inizio di una transazione distribuita Transact-SQL. Quando si usa SQL Server, la transazione distribuita viene gestita da Microsoft Distributed Transaction Coordinator (MS DTC).

  • In caso di Istanza gestita di SQL di Azure, la transazione distribuita viene gestita dal servizio stesso e non da MS DTC. Per informazioni sulle transazioni distribuite in database SQL di Azure e Istanza gestita di SQL di Azure, vedere Transazioni distribuite tra database cloud.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

transaction_name

Nome di transazione definito dall'utente e utilizzato per tenere traccia della transazione distribuita nelle utilità MS DTC. transaction_name deve essere conforme alle regole per gli identificatori e deve rispettare il limite <= 32 per il numero di caratteri.

@tran_name_variable

Nome di una variabile definita dall'utente contenente un nome di transazione utilizzato per tenere traccia della transazione distribuita nelle utilità MS DTC. La variabile deve essere dichiarata con un tipo di dati char, varchar, nchar o nvarchar.

Osservazioni:

L'istanza di SQL Server Database Engine in cui viene eseguita l'istruzione BEGIN DISTRIBUTED TRANSACTION è l'origine della transazione e controlla il completamento della transazione. Quando viene successivamente eseguita un'istruzione COMMIT TRANSACTION o ROLLBACK TRANSACTION per la sessione, l'istanza di controllo richiede che il completamento della transazione distribuita in tutte le istanze coinvolte venga gestito da MS DTC.

L'isolamento dello snapshot a livello di transazione non supporta le transazioni distribuite.

L'integrazione di istanze remote del motore di database in una transazione distribuita in genere avviene quando una sessione già integrata nella transazione distribuita esegue una query distribuita in cui viene fatto riferimento a un server collegato.

Se, ad esempio, l'istruzione BEGIN DISTRIBUTED TRANSACTION viene eseguita nel ServerA, la sessione chiama una stored procedure nel ServerB e un'altra stored procedure nel ServerC. La stored procedure nel ServerC esegue una query distribuita sul ServerD e quindi nella transazione distribuita vengono coinvolti tutti i quattro computer. L'istanza del motore di database nel ServerA è l'istanza di origine e di controllo della transazione.

Le sessioni coinvolte in transazioni distribuite Transact-SQL non ottengono un oggetto transazione passabile a un'altra sessione per l'integrazione esplicita nella transazione distribuita. L'unico modo per consentire l'integrazione di un server remoto nella transazione consiste nell'utilizzare il server come destinazione di una chiamata di stored procedure remota o di una query distribuita.

Quando una query distribuita viene eseguita in una transazione locale, la transazione viene promossa automaticamente a una transazione distribuita se l'origine dati OLE DB di destinazione supporta ITransactionLocal. Se l'origine dati OLE DB di destinazione non supporta ITransactionLocal, nella query distribuita è possibile eseguire solo operazioni di lettura.

Una sessione già integrata nella transazione distribuita esegue una chiamata di stored procedure remota in cui viene fatto riferimento a un server remoto.

L'opzione sp_configure remote proc trans controlla se le chiamate a stored procedure remote in una transazione locale determinano automaticamente la promozione della transazione locale a una transazione distribuita gestita da MS DTC. L'opzione SET a livello di connessione REMOTE_PROC_TRANSACTIONS può essere usata per eseguire l'override del valore predefinito dell'istanza stabilito da sp_configure remote proc trans. Quando questa opzione è attivata, una chiamata di stored procedure remota determina la promozione di una transazione locale a una transazione distribuita. La connessione in cui viene creata la transazione MS DTC diventa l'origine della transazione. L'istruzione COMMIT TRANSACTION avvia un'operazione di commit coordinata da MS DTC. Se l'opzione sp_configure remote proc trans è IMPOSTATa su ON, le chiamate di stored procedure remote nelle transazioni locali vengono protette automaticamente come parte delle transazioni distribuite senza dover riscrivere le applicazioni per eseguire in modo specifico BEGIN DISTRIBUTED TRANSACTION anziché BEGIN TRANSACTION.

Per ulteriori informazioni sull'ambiente e sul processo delle transazioni distribuite, vedere la documentazione di Microsoft Distributed Transaction Coordinator.

Autorizzazioni

È richiesta l'appartenenza al ruolo public.

Esempi

In questo esempio viene eliminato un candidato dal database AdventureWorks2022 sia nell'istanza locale del motore di database che in un'istanza in un server remoto. Entrambi i database eseguiranno il commit o il rollback della transazione.

Nota

Se nel computer che esegue l'istanza del motore di database non è installato MS DTC, in questo esempio viene visualizzato un messaggio di errore. Per ulteriori informazioni sull'installazione di MS DTC, vedere la documentazione di 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

Passaggi successivi