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).

Icono de vínculo a temasConvenciones 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. El parámetro 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.

Notas

La instancia del SQL Server Database Engine (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 en el nivel de instantánea no admite transacciones distribuidas. Para obtener más información, vea Usar niveles de aislamiento basado en versiones de filas.

La principal manera en que las instancias remotas del Database Engine (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 Database Engine (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 sólo 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 en el 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

Debe pertenecer a la función public.

Ejemplos

Este ejemplo elimina un candidato de la base de datos AdventureWorks tanto en la instancia local del Database Engine (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 Database Engine (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 AdventureWorks;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO