Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Síntomas

Suponga que crea un grupo de disponibilidad mediante la cláusula WITH DTC_SUPPORT = PER_DB en Microsoft SQL Server. Cuando intenta ejecutar una instrucción SAVE TRANSACTION en una transacción o procedimientos almacenados del sistema como sp_executesql, recibe uno de los siguientes mensajes de error:

Msg 627, Level 16, State 0, LineNumber
No puede usar GUARDAR TRANSACCIÓN dentro de una transacción distribuida.
Msg 12324, Nivel 16, Estado 100, LineNumber
Las transacciones distribuidas (DTC) no son compatibles con tablas optimizadas para memoria.
Error: 3933, Gravedad: 16, Estado: 1.
No se puede promover la transacción a una transacción distribuida porque hay un punto de almacenamiento activo en esta transacción.

Causa

Cuando se habilita una base de datos en Always On grupo de disponibilidad para WITH DTC_SUPPORT = PER_DB, siempre que una transacción implique varias bases de datos, la transacción se promueve a transacción MSDTC en SQL Server 2016 SP2 y SQL Server 2017. Hay limitaciones en las transacciones MSDTC, por ejemplo, los puntos de almacenamiento no se pueden utilizar, las tablas optimizadas para memoria no se pueden utilizar.

En algunas situaciones, las transacciones entre bases de datos no se producen porque los usuarios tienen transacciones que implican a dos bases de datos de usuario, sino porque las transacciones implican la base de datos actual y las bases de datos del sistema (master, tempdb, modelo, base de datos de recursos del sistema). Dado que la base de datos de recursos del sistema es realmente de solo lectura, no es necesario promover a transacción MSDTC si una transacción de base de datos cruzada implica la base de datos de recursos del sistema, pero no otras bases de datos del sistema. 

Solución

La corrección introducida en este ARTÍCULO omite la promoción a la transacción MSDTC si la base de datos de recursos del sistema y una base de datos de usuarios que forma parte de un grupo de disponibilidad habilitado para PER_DB DTC están implicados en una transacción de base de datos cruzada dentro de la misma SQL Server instancia.

Por lo tanto, si la causa original de los errores enumerados anteriormente es la transacción cruzada de la base de datos que implica la base de datos de recursos del sistema, esta corrección lo abordará. A veces, es posible que el usuario vea los errores enumerados anteriormente con la misma causa subyacente. A continuación se enumeran las condiciones en las que se aplica esta corrección:

  • Una base de datos forma parte de un grupo de disponibilidad Always On habilitado WITH DTC_SUPPORT = PER_DB.

  • Una transacción de base de datos cruzada implica esta base de datos y la base de datos de recursos del sistema en la misma SQL Server instancia.

  • Dentro de la transacción entre bases de datos, se usa GUARDAR TRANSACCIÓN o se usan tablas optimizadas para memoria.

Dicha transacción produciría un error con los errores enumerados anteriormente sin esta corrección. Con esta corrección, dicha transacción debería proceder.

Nota: Esta corrección corrige las transacciones entre bases de datos que implican la base de datos de recursos del sistema, pero cualquier transacción entre bases de datos que implique bases de datos de usuario y contenga una instrucción SAVE TRANSACTION seguirá teniendo errores y debe volver a escribirse.

Este problema se ha corregido en la siguiente actualización acumulativa para SQL Server:

Cada nueva actualización acumulativa de SQL Server contiene todas las revisiones y todas las correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Echa un vistazo a las últimas actualizaciones acumulativas de SQL Server:

Más información

Puede encontrar información adicional sobre DTC_SUPPORT = PER_DB, tablas optimizadas para memoria, SAVE TRANSACTION en los siguientes vínculos.

Las transacciones de base de datos en la misma instancia SQL Server vinculan esta parte a https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
las tablas optimizadas para memoria vinculan esta parte a
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations vincular esta parte a la https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarksGUARDAR TRANSACCIÓN

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".

Referencias

Obtén información sobre la terminología que Microsoft usa para describir las actualizaciones de software.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×