Transacciones distribuidas de Transact-SQL

Las transacciones distribuidas iniciadas en Transact-SQL tienen una estructura relativamente simple:

  1. Un script o conexión de aplicación de Transact-SQL ejecuta una instrucción Transact-SQL que inicia una transacción distribuida.

  2. La instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) que ejecuta la instrucción se convierte en el servidor de control de la transacción.

  3. A continuación, el script o la aplicación ejecuta consultas distribuidas en servidores vinculados o procedimientos almacenados remotos en servidores remotos.

  4. A medida que se realizan las llamadas de las consultas distribuidas y los procedimientos remotos, el servidor de control llama automáticamente al Coordinador de transacciones distribuidas de Microsoft (MS DTC) para dar de alta los servidores vinculados y remotos en la transacción distribuida.

  5. Cuando el script o la aplicación emite una instrucción COMMIT o ROLLBACK, la instancia de control de SQL Server llama a MS DTC para administrar el proceso de confirmación en dos fases o para notificar a los servidores vinculados y remotos que reviertan las transacciones.

Instrucciones de Transact-SQL requeridas

Las instrucciones Transact-SQL que controlan las transacciones distribuidas son pocas debido a que el trabajo lo realizan internamente SQL Server Database Engine (Motor de base de datos de SQL Server) y MS DTC. Las únicas instrucciones Transact-SQL que se necesitan en el script o la aplicación de Transact-SQL son las necesarias para:

  • Iniciar una transacción distribuida.

  • Realizar consultas distribuidas en servidores vinculados o ejecutar llamadas a procedimientos remotos en servidores remotos.

  • Llamar a las instrucciones Transact-SQL COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION o ROLLBACK WORK estándar para finalizar la transacción.

    Para cualquier transacción distribuida de Transact-SQL, la instancia de Motor de base de datos que procesa el script o la conexión de Transact-SQL llama automáticamente a MS DTC para coordinar la confirmación o la reversión de la transacción.

Iniciar transacciones distribuidas

Puede iniciar transacciones distribuidas en Transact-SQL de las maneras siguientes:

  • Inicie una transacción distribuida explícita con la instrucción BEGIN DISTRIBUTED TRANSACTION.

    También puede ejecutar una consulta distribuida en un servidor vinculado. La instancia de Motor de base de datos a la que se ha conectado llama a MS DTC para administrar la transacción distribuida con el servidor vinculado. También puede llamar a procedimientos almacenados remotos de una instancia remota de Motor de base de datos como parte de la transacción distribuida.

  • Mientras esté en una transacción local, ejecute una consulta distribuida.

    Si el origen de datos de OLE DB admite la interfaz ITransactionJoin, la transacción aumenta al nivel de transacción distribuida, aunque la consulta sea de sólo lectura. Si el origen de datos no admite ITransactionJoin, únicamente se permiten instrucciones de sólo lectura.

  • Si se ha ejecutado SET REMOTE_PROC_TRANSACTIONS ON y una transacción local llama a un procedimiento almacenado remoto en otra instancia de Motor de base de datos, la transacción local aumenta al nivel de transacción distribuida.

    Motor de base de datos utiliza MS DTC para coordinar la transacción con el servidor remoto. Si la opción REMOTE_PROC_TRANSACTIONS se establece en OFF, las llamadas a procedimientos almacenados remotos se ejecutan fuera del ámbito de una transacción local. El trabajo que ha realizado el procedimiento remoto no se revierte si la transacción local se revierte. El trabajo se confirma en el momento en que concluye el procedimiento almacenado, no cuando se confirma la transacción local.

REMOTE_PROC_TRANSACTIONS es una opción de compatibilidad que afecta sólo a llamadas a procedimientos almacenados remotos que se realizan a servidores remotos definidos con sp_addserver. La opción no es aplicable a consultas distribuidas que ejecutan procedimientos almacenados en servidores vinculados definidos con sp_addlinkedserver. Para obtener más información acerca de consultas distribuidas, vea Consultas distribuidas.