Compatibilidad con el Coordinador de transacciones distribuidas de Microsoft en RDS for SQL Server
Una transacción distribuida es una transacción de base de datos en la que participan dos o más anfitriones de red. RDS for SQL Server admite transacciones distribuidas entre anfitriones, donde un solo anfitrión puede ser uno de los siguientes:
-
Instancia de base de datos de RDS para SQL Server
-
Host local de SQL Server
-
Host de Amazon EC2 con SQL Server instalado
-
Cualquier otro host de EC2 o instancia de base de datos de RDS con un motor de base de datos que admita transacciones distribuidas
En RDS, a partir de SQL Server 2012 (versión 11.00.5058.0.v1 y posterior), todas las ediciones de RDS for SQL Server admiten transacciones distribuidas. La compatibilidad se proporciona con el Coordinador de transacciones distribuidas de Microsoft (MSDTC). Para obtener información detallada acerca de MSDTC, consulte Distributed Transaction Coordinator
Contenido
Limitaciones
Las siguientes limitaciones se aplican al uso de MSDTC en RDS para SQL Server:
-
MSDTC no se admite en instancias que utilizan la creación de reflejo de base de datos de SQL Server. Para obtener más información, consulte Transacciones - Grupos de disponibilidad y creación de reflejo de la base de datos
. -
El parámetro
in-doubt xact resolution
debe estar establecido en 1 o 2. Para obtener más información, consulte Modificación del parámetro para MSDTC. -
MSDTC requiere que todos los nombres de host que participan en transacciones distribuidas se puedan resolver mediante sus nombres de host. RDS mantiene automáticamente esta funcionalidad para instancias unidas a dominios. Sin embargo, para instancias independientes, asegúrese de configurar manualmente el servidor DNS.
-
Las transacciones XA de Java Database Connectivity (JDBC) son compatibles con SQL Server 2017 versión 14.00.3223.3 y posteriores, así como con SQL Server 2019.
-
No se admiten transacciones distribuidas que dependan de bibliotecas de vínculos dinámicos (DLL) del cliente en instancias de RDS.
-
No se admite el uso de bibliotecas de vínculos dinámicos XA personalizadas.
Utilización de transacciones
Uso de transacciones distribuidas
En Amazon RDS for SQL Server, ejecute transacciones distribuidas de la misma manera que las transacciones distribuidas que se ejecutan en las instalaciones:
-
Usando transacciones promocionables
System.Transactions
de .NET Framework , que optimizan las transacciones distribuidas aplazando su creación hasta que sean necesarias.En este caso, la promoción es automática y no requiere ninguna intervención. Si solo hay un administrador de recursos dentro de la transacción, no se realiza ninguna promoción. Para obtener más información acerca de los ámbitos de transacción implícitos, consulte Implementación de una transacción implícita usando el ámbito de transacción
en la documentación de Microsoft. Las transacciones promocionables son compatibles con estas implementaciones .NET:
-
A partir de ADO.NET 2.0,
System.Data.SqlClient
admite transacciones promocionables con SQL Server. Para obtener más información, consulte Integración de System.Transactions con SQL Serveren la documentación de Microsoft. -
ODP.NET admite
System.Transactions
. Se crea una transacción local para la primera conexión abierta en el ámbitoTransactionsScope
a Oracle Database 11g versión 1 (versión 11.1) y posteriores. Cuando se abre una segunda conexión, esta transacción se promueve automáticamente a una transacción distribuida. Para obtener más información acerca de la compatibilidad con transacciones distribuidas en ODP.NET, consulte Integración con Coordinador de transacciones distribuidas de Microsoften la documentación de Microsoft.
-
-
Uso de la instrucción
BEGIN DISTRIBUTED TRANSACTION
. Para obtener más información, consulte BEGIN DISTRIBUTION TRANSACT-SQL (Transact-SQL)en la documentación de Microsoft.
Utilización de transacciones XA
A partir de RDS for SQL Server 2017 versión 14.00.3223.3, puede controlar las transacciones distribuidas mediante JDBC. Cuando establece la opción Enable XA
en true
en la opción MSDTC
, RDS habilita automáticamente las transacciones de JDBC y otorga el rol SqlJDBCXAUser
al usuario guest
. Esto permite ejecutar transacciones distribuidas mediante JDBC. Para obtener más información, incluido un ejemplo de código, consulte Descripción de las transacciones XA
Uso del seguimiento de transacciones
RDS admite controlar los seguimientos de transacciones de MSDTC y descargarlos desde la instancia de base de datos de RDS para solucionar problemas. Puede controlar las sesiones de seguimiento de transacciones ejecutando el siguiente procedimiento almacenado de RDS.
exec msdb.dbo.rds_msdtc_transaction_tracing '
trace_action
', [@traceall='0|1
'], [@traceaborted='0|1
'], [@tracelong='0|1
'];
El siguiente parámetro es obligatorio:
-
trace_action
: la acción de rastreo. Puede serSTART
,STOP
, oSTATUS
.
Los siguientes parámetros son opcionales:
-
@traceall
: establezca en 1 para realizar un seguimiento de todas las transacciones distribuidas. El valor predeterminado es 0. -
@traceaborted
: establezca en 1 para realizar un seguimiento de las transacciones distribuidas canceladas. El valor predeterminado es 0. -
@tracelong
: establezca en 1 para realizar un seguimiento de transacciones distribuidas de larga duración. El valor predeterminado es 0.
ejemplo de acción de seguimiento START
Para iniciar una nueva sesión de seguimiento de transacciones, ejecute la instrucción de ejemplo siguiente.
exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='
0
', @traceaborted='1
', @tracelong='1
';
nota
Solo puede estar activa una sesión de seguimiento de transacciones a la vez. Si se emite un nuevo comando START
de sesión de seguimiento mientras una sesión de seguimiento está activa, se devuelve un error y la sesión de seguimiento activa se mantiene sin cambios.
ejemplo de acción de seguimiento STOP
Para detener una sesión de seguimiento de transacciones, ejecute la siguiente instrucción.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
Esta instrucción detiene la sesión de seguimiento de transacciones activa y guarda los datos de seguimiento de la transacción en el directorio de registro de la instancia de base de datos de RDS. La primera fila de la salida contiene el resultado general y las siguientes líneas indican los detalles de la operación.
A continuación se muestra un ejemplo de una detención satisfactoria de sesión de seguimiento.
OK: Trace session has been successfully stopped. Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats, 8 found. Searching for TMF files on path: (null) Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log: OS version 10.0.14393 (Currently running on 6.2.9200) Start Time <timestamp> End Time <timestamp> Timezone is @tzres.dll,-932 (Bias is 0mins) BufferSize 16384 B Maximum File Size 10 MB Buffers Written Not set (Logger may not have been stopped). Logger Mode Settings (11000002) ( circular paged ProcessorCount 1 Processing completed Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3 Event traces dumped to d:\rdsdbdata\Log\msdtc_<
timestamp
>.log
Puede utilizar la información detallada para consultar el nombre del archivo de registro generado. Para obtener más información acerca de la descarga de archivos de registro de la instancia de base de datos de RDS, consulte Supervisión de archivos de registro de Amazon RDS.
Los registros de sesión de seguimiento permanecen en la instancia durante 35 días. Los registros de sesión de seguimiento anteriores se eliminan automáticamente.
ejemplo de acción de seguimiento de STATUS
Para rastrear el estado de una sesión de seguimiento de transacciones, ejecute la siguiente instrucción.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
Esta instrucción genera lo siguiente como filas separadas del conjunto de resultados.
OK SessionStatus: <
Started|Stopped
> TraceAll: <True|False
> TraceAborted: <True|False
> TraceLongLived: <True|False
>
La primera línea indica el resultado general de la operación: OK
o ERROR
con detalles, si procede. Las líneas siguientes indican detalles sobre el estado de la sesión de seguimiento:
-
SessionStatus
puede ser uno de los siguientes:-
Started
si se está ejecutando una sesión de seguimiento. -
Stopped
si no se está ejecutando ninguna sesión de seguimiento.
-
-
Los indicadores de sesión de seguimiento pueden ser
True
oFalse
en función de cómo se establecieron en elSTART
comando.