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).
Conventions 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.
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 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
Nécessite l'appartenance au rôle public.
Exemples
Cet exemple supprime un candidat de la base de données AdventureWorks2012 à 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.
[!REMARQUE]
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 AdventureWorks2012;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO
Voir aussi
Référence
BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)