Compartir a través de


Creación de una transacción distribuida

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Importante

SQL Server Native Client (SNAC) no se incluye con:

  • SQL Server 2022 (16.x) y versiones posteriores
  • SQL Server Management Studio 19 y versiones posteriores

No se recomiendan SQL Server Native Client (SQLNCLI o SQLNCLI11) ni Microsoft OLE DB Provider for SQL Server (SQLOLEDB) heredado para el desarrollo de nuevas aplicaciones.

En el caso de los proyectos nuevos, use uno de los siguientes controladores:

Para SQLNCLI que se incluye como componente de motor de base de datos de SQL Server (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

Se puede crear una transacción distribuida para diferentes sistemas de Microsoft SQL de diferentes maneras.

El controlador ODBC llama a MSDTC para SQL Server local

El Coordinador de transacciones distribuidas de Microsoft (MSDTC) permite a las aplicaciones ampliar o distribuir una transacción entre dos o más instancias de SQL Server. La transacción distribuida funciona incluso cuando las dos instancias se hospedan en equipos independientes.

MSDTC está instalado para Microsoft SQL Server local, pero no está disponible para el servicio en la nube de Azure SQL Database de Microsoft.

MSDTC lo llama el controlador de SQL Server Native Client para la conectividad abierta de bases de datos (ODBC), cuando el programa de C++ administra una transacción distribuida. El controlador ODBC de Native Client tiene un administrador de transacciones compatible con el estándar XA de procesamiento de transacciones distribuidas de grupo abierto (DTP). MSDTC requiere este cumplimiento. Normalmente, todos los comandos de administración de transacciones se envían a través de este controlador ODBC de Native Client. La secuencia es la siguiente:

  1. La aplicación ODBC de C++ Native Client inicia una transacción mediante una llamada a SQLSetConnectAttr, con el modo de confirmación automática desactivado.

  2. La aplicación actualiza algunos datos de SQL Server X en el equipo A.

  3. La aplicación actualiza algunos datos en SQL Server Y en el equipo B.

    • Si se produce un error en una actualización de SQL Server Y, todas las actualizaciones no confirmadas en ambas instancias de SQL Server se revierten.
  4. Por último, la aplicación finaliza la transacción llamando a SQLEndTran (1) con la opción SQL_COMMIT o SQL_ROLLBACK.

(1) MSDTC se puede invocar sin ODBC. En tal caso, MSDTC se convierte en el administrador de transacciones y la aplicación ya no usa SQLEndTran.

Solo una transacción distribuida

Supongamos que la aplicación ODBC de C++ Native Client está incluida en una transacción distribuida. A continuación, la aplicación se inscribe en una segunda transacción distribuida. En este caso, el controlador ODBC de SQL Server Native Client deja la transacción distribuida original y se inscribe en la nueva transacción distribuida.

Para obtener más información, vea Referencia del programador de DTC.

Alternativa de C# para SQL Database en la nube

MSDTC no es compatible con Azure SQL Database o Azure Synapse Analytics.

Sin embargo, se puede crear una transacción distribuida para SQL Database haciendo que el programa de C# use la clase .NET System.Transactions.TransactionScope.

Otros lenguajes de programación

Es posible que los siguientes lenguajes de programación no proporcionen compatibilidad con transacciones distribuidas con el servicio SQL Database:

  • C++ nativo que usan controladores ODBC
  • Servidor vinculado mediante Transact-SQL
  • Controladores JDBC

Consulte también

Realizar transacciones (ODBC)