Compatibilidad con el Coordinador de transacciones distribuidas de Microsoft en RDS for SQL Server - Amazon Relational Database Service

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 en la documentación de Microsoft.

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 Server en la documentación de Microsoft.

    • ODP.NET admite System.Transactions. Se crea una transacción local para la primera conexión abierta en el ámbito TransactionsScope 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 Microsoft en 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 en la documentación de Microsoft.

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 ser START, STOP, o STATUS.

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 o False en función de cómo se establecieron en el START comando.