Partager via


BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Indique le début d'une transaction Transact-SQL distribuée gérée par Microsoft DTC (Distributed Transaction Coordinator).

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

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

Arguments

  • transaction_name
    Nom de transaction, défini par l'utilisateur, qui est utilisé pour suivre la transaction distribuée dans les utilitaires MS DTC. transaction_name doit suivre les règles applicables aux identificateurs et comporter au maximum 32 caractères.

  • @tran_name_variable
    Nom d'une variable définie par l'utilisateur qui contient un nom de transaction utilisé pour suivre la transaction distribuée dans les utilitaires MS DTC. La variable doit être déclarée avec un type de données char, varchar, nchar ou nvarchar.

Notes

L'instance de Moteur de base de données SQL Server exécutant l'instruction BEGIN DISTRIBUTED TRANSACTION est le créateur de la transaction et contrôle également l'exécution jusqu'à son terme. Si une instruction COMMIT TRANSACTION ou ROLLBACK TRANSACTION est ensuite émise pour la session, l'instance de contrôle demande à MS DTC de gérer l'exécution de la transaction distribuée sur toutes les instances concernées.

L'isolement d'instantané au niveau de la transaction ne prend pas en charge les transactions distribuées. Pour plus d'informations, consultez Utilisation de niveaux d'isolement basés sur la gestion de la version des lignes.

Le plus souvent, les instances distantes du Moteur de base de données sont inscrites dans une transaction distribuée lorsqu'une session déjà inscrite dans cette transaction exécute une requête distribuée référençant un serveur lié.

Par exemple, si BEGIN DISTRIBUTED TRANSACTION est émis sur ServerA, la session appelle une procédure stockée sur ServerB et une autre sur ServerC. La procédure stockée sur ServerC exécute alors une requête distribuée sur ServerD, et les quatre ordinateurs se trouvent impliqués dans la transaction distribuée. L'instance du Moteur de base de données sur ServerA est l'instance qui crée la transaction et contrôle son exécution.

Les sessions intervenant dans les transactions Transact-SQL distribuées n'obtiennent pas d'objet de transaction qu'elles peuvent transmettre à une autre session pour que celle-ci soit explicitement inscrite dans la transaction distribuée. La seule façon pour un serveur distant de s'inscrire dans une transaction est d'être la cible d'une requête distribuée ou d'un appel de procédure stockée distante.

Quand une requête distribuée est exécutée dans une transaction locale, celle-ci est automatiquement promue en transaction distribuée si la source de données OLE DB cible prend en charge ITransactionLocal. Si la source de données OLE DB cible ne prend pas en charge ITransactionLocal, seules les opérations de lecture sont autorisées dans la requête distribuée.

Une session déjà inscrite dans la transaction distribuée effectue un appel de procédure distante faisant référence à un serveur distant.

L'option sp_configure remote proc trans détermine si les appels aux procédures stockées distantes dans une transaction locale entraînent automatiquement la promotion de celle-ci en une transaction distribuée gérée par MS DTC. REMOTE_PROC_TRANSACTIONS est un paramètre au niveau de la connexion qui peut être utilisé pour remplacer le serveur par défaut défini par sp_configure remote proc trans. Quand cette option est activée, un appel de procédure stockée à distance entraîne la promotion de la transaction locale en une transaction distribuée. Le serveur qui crée la transaction MS DTC devient l'émetteur de la transaction. COMMIT TRANSACTION déclenche une validation coordonnée MS DTC. Si l'option sp_configure remote proc trans est activée, les appels de procédures stockées à distance contenus dans les transactions locales sont automatiquement protégés dans le cadre des transactions distribuées, et cela sans qu'il soit nécessaire de réécrire les applications pour définir explicitement un BEGIN DISTRIBUTED TRANSACTION à la place d'un BEGIN TRANSACTION.

Pour plus d'informations sur l'environnement et le traitement des transactions distribuées, consultez la documentation de Microsoft Distributed Transaction Coordinator (MSDTC).

Autorisations

Il faut obligatoirement appartenir au rôle public.

Exemple

Cet exemple supprime un candidat de la base de données AdventureWorks2008R2 à la fois sur l'instance locale du Moteur de base de données et sur une instance située sur un serveur distant. Ces deux bases locale et distante vont soit valider soit annuler la transaction.

Notes

Cet exemple provoque un message d'erreur, sauf si MS DTC est actuellement installé sur l'ordinateur qui exécute l'instance du Moteur de base de données. Pour plus d'informations sur l'installation de MS DTC, consultez la documentation de Microsoft Distributed Transaction Coordinator.

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