Compartir a través de


BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Especifica el inicio de una transacción distribuida de Transact-SQL. Al usar SQL Server, la transacción distribuida se administra mediante el Coordinador de transacciones distribuidas de Microsoft (MS DTC).

  • En el caso de Azure SQL Managed Instance, la transacción distribuida se gestiona directamente por el servicio y no por MS DTC. Para obtener información sobre las transacciones en Azure SQL Database y Azure SQL Managed Instance, consulte Transacciones distribuidas en bases de datos en la nube.

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 usar 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

Debe pertenecer al rol public.

Ejemplos

Este ejemplo elimina un candidato de la base de datos AdventureWorks2022 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 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

Pasos siguientes