BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
Especifica el inicio de una transacción distribuida de Transact-SQL administrada mediante el Coordinador de transacciones distribuidas de Microsoft (MS DTC).
Convenciones de sintaxis de Transact-SQL
Sintaxis
BEGIN DISTRIBUTED { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ]
[ ; ]
Argumentos
transaction_name
Se trata de un nombre de transacción definida por el usuario que se utiliza para realizar el seguimiento de la transacción distribuida en las utilidades de MS DTC. transaction_name debe seguir las reglas de los identificadores y ser <= 32 caracteres.@tran\_name\_variable
Se trata del nombre de una variable definida por el usuario que contiene el nombre de una transacción utilizada para realizar el seguimiento de la transacción distribuida en las utilidades de MS DTC. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar.
Comentarios
La instancia del Motor de base de datos de SQL Server que ejecuta la instrucción BEGIN DISTRIBUTED TRANSACTION es el originador de la transacción y controla su realización. Posteriormente, cuando en la sesión se ejecuta una instrucción COMMIT TRANSACTION o ROLLBACK TRANSACTION, la instancia que controla la transacción solicita a MS DTC que administre la realización de la transacción distribuida entre todas las instancias participantes.
El aislamiento de instantáneas de nivel de instantánea no admite transacciones distribuidas.
La principal manera en que las instancias remotas del Motor de base de datos se dan de alta en una transacción distribuida es cuando una sesión ya dada de alta en la transacción distribuida ejecuta una consulta distribuida que hace referencia a un servidor vinculado.
Por ejemplo, si BEGIN DISTRIBUTED TRANSACTION se ejecuta en ServerA, la sesión llama a un procedimiento almacenado en ServerB y a otro procedimiento almacenado en ServerC. El procedimiento almacenado en ServerC ejecuta una consulta distribuida en ServerD y, a continuación, los cuatro equipos participan en la transacción distribuida. La instancia del Motor de base de datos en ServerA es la instancia de origen que controla la transacción.
Las sesiones que participan en transacciones distribuidas de Transact-SQL no obtienen un objeto de transacción que puedan pasar a otra sesión para que se dé de alta explícitamente en la transacción distribuida. La única forma en que un servidor remoto puede darse de alta en la transacción consiste en que constituya el destino de una llamada a un procedimiento almacenado remoto o a una consulta distribuida.
Cuando se ejecuta una consulta distribuida en una transacción local, la transacción se promueve automáticamente al nivel de transacción distribuida si el origen de datos OLE DB de destino es compatible con ITransactionLocal. Si el origen de datos OLE DB de destino no es compatible con ITransactionLocal, únicamente se permite realizar operaciones de solo lectura en la consulta distribuida.
Una sesión que ya se ha dado de alta en la transacción distribuida realiza una llamada a un procedimiento almacenado remoto que hace referencia a un servidor remoto.
La opción sp_configure remote proc trans controla si las llamadas a procedimientos almacenados remotos en una transacción local provocan automáticamente que la transacción local se promueva al nivel de transacción distribuida administrada mediante MS DTC. Se puede utilizar la opción REMOTE_PROC_TRANSACTIONS de SET de nivel de conexión para anular la configuración predeterminada de la instancia establecida por sp_configure remote proc trans. Con esta opción activada, la llamada a un procedimiento almacenado remoto hace que una transacción local se promueva al nivel de transacción distribuida. La conexión que crea la transacción de MS DTC se convierte en el originador de la transacción. COMMIT TRANSACTION inicia una confirmación coordinada de MS DTC. Si la opción sp_configure remote proc trans está activada, las llamadas realizadas a procedimientos almacenados remotos en transacciones locales se protegen automáticamente como parte de transacciones distribuidas sin necesidad de volver a escribir las aplicaciones para que emitan específicamente BEGIN DISTRIBUTED TRANSACTION en lugar de BEGIN TRANSACTION.
Para obtener más información sobre el entorno y el proceso de transacciones distribuidas, vea la documentación del Coordinador de transacciones distribuidas de Microsoft.
Permisos
Requiere la pertenencia al rol public.
Ejemplos
Este ejemplo elimina un candidato de la base de datos AdventureWorks2012 tanto en la instancia local del Motor de base de datos como en la instancia de un servidor remoto. Ambas bases de datos, local y remota, confirmarán o revertirán la transacción.
[!NOTA]
A menos que MS DTC esté instalado actualmente en el equipo que ejecuta la instancia del Motor de base de datos, este ejemplo produce un mensaje de error. Para obtener más información sobre cómo instalar Microsoft DTC, vea la documentación de Microsoft DTC (Coordinador de transacciones distribuidas).
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
Vea también
Referencia
BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)