Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
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.
La aplicación actualiza algunos datos de SQL Server X en el equipo A.
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.
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