Transacciones - Grupos de disponibilidad y creación de reflejo de la base de datosTransactions - availability groups and database mirroring

En este tema se aplica a: SíSQL Servernobase de datos de SQL Azurenoalmacenamiento de datos de SQL Azure ningún Almacenamiento de datos paralelosTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

En este tema se describe la compatibilidad de las transacciones entre bases de datos y distribuidas para la creación de reflejo de la base de datos y grupos de disponibilidad AlwaysOn.This topic describes cross-database and distributed transactions support for Always On availability groups and database mirroring.

Compatibilidad con transacciones distribuidasSupport for distributed transactions

SQL Server 2017 admite las transacciones distribuidas de bases de datos en los grupos de disponibilidad.SQL Server 2017 supports distributed transactions for databases in availability groups. Esto engloba tanto las bases de datos que hay en la misma instancia de SQL Server como las bases de datos en distintas instancias de SQL Server.This support includes databases on the same instance of SQL Server or databases on different instances of SQL Server. Las transacciones distribuidas no son posibles con bases de datos configuradas para la creación de reflejo de base de datos.Distributed transactions are not supported for databases configured for database mirroring.

Nota

[!INCLUDE[SQL Server 2016]](../../../includes/sssql15-md.md)] incluía compatibilidad limitada con las transacciones distribuidas en bases de datos de grupos de disponibilidad.(../../../includes/sssql15-md.md)]SQL Server 2016 included limited support for distributed transactions in for databases in an availability group. Las transacciones distribuidas en las que se usan bases de datos de un grupo de disponibilidad se admitían siempre y cuando no hubiera más bases de datos de la transacción en la misma instancia de SQL Server.Distributed transactions using databases in an availability group were supported as long as no other databases in the transaction were in the same instance of SQL Server. Para más información, vea SQL Server 2016 DTC Support In Availability Groups (Compatibilidad con SQL Server 2016 DTC en grupos de disponibilidad).For more information, see SQL Server 2016 DTC Support In Availability Groups

Para configurar un grupo de disponibilidad para transacciones distribuidas, vea Configurar un grupo de disponibilidad para las transacciones distribuidas.To configure an availability group for distributed transactions, see Configure Availability Group for Distributed Transactions.

Obtenga más información en:See more information at:

SQL Server 2016 y versiones anteriores: compatibilidad con transacciones entre bases de datos en la misma instancia de SQL ServerSQL Server 2016 and before: Support for cross-database transactions within the same SQL Server instance

En SQL Server 2016 y versiones anteriores, las transacciones entre bases de datos en la misma instancia de SQL Server no son compatibles con los grupos de disponibilidad.In SQL Server 2016 and before, cross-database transactions within the same SQL Server instance are not supported for availability groups. Esto significa que la misma instancia de SQL Server no puede hospedar dos bases de datos en una transacción entre bases de datos.This means that no two databases in a cross-database transaction may be hosted by the same SQL Server instance. Esto ocurre incluso si esas bases de datos forman parte del mismo grupo de disponibilidad.This is true even if those databases are part of the same availability group.

Las transacciones entre bases de datos tampoco se admiten para la creación de reflejo de la base de datos.Cross-database transactions are also not supported for database mirroring.

SQL Server 2016: compatibilidad con transacciones distribuidasSQL Server 2016: Support for distributed transactions

Las transacciones distribuidas son compatibles con los grupos de disponibilidad.Distributed transactions are supported with availability groups. Esto se aplica a las transacciones distribuidas entre bases de datos hospedadas en dos instancias diferentes de SQL Server.This applies to distributed transactions between databases hosted by two different SQL Server instances. También se aplica a las transacciones distribuidas entre SQL Server y otro servidor compatible con DTC.It also applies to distributed transactions between SQL Server and another DTC-compliant server.

Coordinador de transacciones distribuidas de Microsoft (MSDTC o DTC) es un servicio de Windows que proporciona infraestructura de transacciones para sistemas distribuidos.Microsoft Distributed Transaction Coordinator (MSDTC or DTC) is a Windows service that provides transaction infrastructure for distributed systems. MSDTC permite que las aplicaciones cliente incluyan varios orígenes de datos en una transacción que luego se confirma en todos los servidores incluidos en la transacción.MSDTC permits client applications to include multiple data sources in one transaction which then is committed across all servers included in the transaction. Por ejemplo, puede usar MSDTC para coordinar transacciones que abarcan varias bases de datos en servidores diferentes.For example, you can use MSDTC to coordinate transactions that span multiple databases on different servers.

SQL Server 2016 ofrece la posibilidad de usar transacciones distribuidas en las que una o varias de las bases de datos de la transacción se encuentran en un grupo de disponibilidad.SQL Server 2016 introduces the capability to use distributed transactions where one or more of the databases in the transaction are in an availability group. Antes de SQL Server 2016, no se admitían las transacciones distribuidas para bases de datos de grupos de disponibilidad.Prior to SQL Server 2016 distributed transactions were not supported for databases in availability groups. SQL Server 2016 puede registrar un administrador de recursos por base de datos.SQL Server 2016 can register a resource manager per database. Esta nueva funcionalidad es la razón por la que las transacciones distribuidas pueden incluir bases de datos de grupos de disponibilidad.This new capability is why distributed transactions can include databases in availability groups.

Se deben cumplir los requisitos siguientes:The following requirements must be met:

  • Los grupos de disponibilidad deben ejecutarse en Windows Server 2016 o Windows Server 2012 R2.Availability groups must be running on Windows Server 2016 or Windows Server 2012 R2. Para Windows Server 2012 R2, debe instalar la actualización de KB3090973 disponible en https://support.microsoft.com/en-us/kb/3090973.For Windows Server 2012 R2, you must install the update in KB3090973 available at https://support.microsoft.com/en-us/kb/3090973.

  • Los grupos de disponibilidad deben crearse con el comando CREATE AVAILABILITY GROUP y la cláusula WITH DTC_SUPPORT = PER_DB.Availability groups must be created with the CREATE AVAILABILITY GROUP command and the WITH DTC_SUPPORT = PER_DB clause. Actualmente no se puede modificar un grupo de disponibilidad existente.You cannot currently alter an existing availability group.

  • Todas las instancias de SQL Server que participarán en el grupo de disponibilidad deben ser de SQL Server 2016 o posterior.All instances of SQL Server that will participate in the availability group must be SQL Server 2016 or later.

    Sin compatibilidad con las transacciones distribuidasNon-support for distributed transactions

    Los casos concretos en que no se admiten transacciones distribuidas incluyen:Specific cases where distributed transactions are not supported include:

    • En SQL Server 2016 y versiones anteriores, si hay más de una base de datos implicada en la transacción en el mismo grupo de disponibilidad.In SQL Server 2016 and prior, where more than one database involved in the transaction is in the same availability group.

    • En SQL Server 2016 y versiones anteriores, si al menos una base de datos se encuentra en un grupo de disponibilidad y otra base de datos se encuentra en la misma instancia de SQL Server.In SQL Server 2016 and prior, where at least one database is in an availability group and another database is on the same instance of SQL Server.

    • Si el grupo de disponibilidad no se ha creado con la transacción distribuida habilitada.Where the availability group was not created with enable distributed transaction.

    • Creación de reflejo de base de datos.Database mirroring.

    Importante

    Determine la salida predeterminada apropiada de las transacciones que DTC no puede resolver para el entorno.Determine the appropriate default outcome of transactions that DTC is unable to resolve for your environment. Para información sobre cómo configurar la salida predeterminada, consulte in-doubt xact resolution (opción de configuración del servidor).For information on how to configure the default outcome see in-doubt xact resolution Server Configuration Option.

Escenario de ejemplo con la creación de reflejo de base de datosExample scenario with database mirroring

En el siguiente ejemplo de creación de reflejo de la base de datos se muestra cómo podría producirse una incoherencia lógica.The following database mirroring example illustrates how a logical inconsistency could occur. En este ejemplo, una aplicación utiliza una transacción entre bases de datos para insertar dos filas de datos: una fila se inserta en una tabla de una base de datos reflejada, A, y la otra fila se inserta en una tabla de otra base de datos, B. La base de datos A se está reflejando en modo de alta seguridad con conmutación automática por error.In this example, an application uses a cross-database transaction to insert two rows of data: one row is inserted into a table in a mirrored database, A, and the other row is inserted into a table in another database, B. Database A is being mirrored in high-safety mode with automatic failover. Mientras la transacción se confirma, la base de datos A deja de estar disponible y la sesión de creación de reflejo se conmuta por error automáticamente al reflejo de la base de datos A.While the transaction is being committed, database A becomes unavailable, and the mirroring session automatically fails over to the mirror of database A.

Después de la conmutación por error, la transacción entre bases de datos podría confirmarse correctamente en la base de datos B, pero no en la base de datos conmutada por error.After the failover, the cross-database transaction might be successfully committed on database B but not on the failed-over database. Esto se produciría si el servidor principal original de la base de datos A no hubiese enviado el registro de transacciones entre bases de datos al servidor reflejado antes del error.This would occur if the original principal server for database A had not sent the log for the cross-database transaction to the mirror server before the failure. Después de la conmutación por error, esa transacción no existiría en el nuevo servidor principal.After the failover, that transaction would not exist on the new principal server. Las bases de datos A y B se volverían incoherentes porque los datos insertados en la base de datos B se mantienen intactos, pero los datos insertados en la base de datos A se pierden.Databases A and B would become inconsistent, because the data inserted in database B remains intact, but the data inserted in database A has been lost.

Su puede producir un escenario similar cuando se usa una transacción de MS DTC.A similar scenario can occur while using a MS DTC transaction. Por ejemplo, después de la conmutación por error, el nuevo servidor principal contacta con MS DTC.For example, after failover, the new principal contacts MS DTC. Sin embargo, MS DTC.no tiene conocimiento del nuevo servidor principal y termina las transacciones que están "preparadas para confirmar" y que otras bases de datos consideran confirmadas.But MS DTC has no knowledge of the new principal server, and it terminates any transactions that are "preparing to commit," which are considered committed in other databases.

Nota

No se puede usar la creación de reflejo de la base de datos con DTC ni usar los grupos de disponibilidad con DTC de formas no aprobadas en este tema.Using Database Mirroring with DTC or using availability groups with DTC in ways not approved in this topic is not supported. Esto no implica que los aspectos del producto no relacionados con DTC sean incompatibles; no obstante, no se admitirán los problemas derivados del uso incorrecto de las transacciones distribuidas.This does not imply that aspects of the product unrelated to DTC are unsupported; however, any issues arising from the improper use of distributed transactions will not be supported.

Pasos siguientesNext steps

Always On availability groups: Interoperability (SQL Server)Always On availability groups: Interoperability (SQL Server)