Support pour Microsoft Distributed Transaction Coordinator dans RDS for SQL Server - Amazon Relational Database Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Support pour Microsoft Distributed Transaction Coordinator dans RDS for SQL Server

Une transaction distribuée est une transaction de base de données dans laquelle deux hôtes réseau ou plus sont impliqués. RDSfor SQL Server prend en charge les transactions distribuées entre les hôtes, où un seul hôte peut être l'un des suivants :

  • RDSpour l'instance SQL de base de données du serveur

  • Hôte de SQL serveur sur site

  • EC2Hôte Amazon avec SQL serveur installé

  • Tout autre EC2 hôte ou RDS instance de base de données doté d'un moteur de base de données prenant en charge les transactions distribuées

À partir de SQL Server 2012 (version 11.00.5058.0.v1 et versions ultérieures), toutes les éditions de for Server prennent en charge les transactions distribuées. RDS RDS SQL Le support est fourni à l'aide de Microsoft Distributed Transaction Coordinator (MSDTC). Pour des informations détaillées surMSDTC, voir Distributed Transaction Coordinator dans la documentation Microsoft.

Limites

Les restrictions suivantes s'appliquent à l'utilisation d'MSDTCon RDS for SQL Server :

  • MSDTCn'est pas pris en charge sur les instances utilisant la mise en miroir de bases de données de SQL serveurs. Pour de plus amples informations, veuillez consulter Transactions - availability groups and database mirroring.

  • Le paramètre in-doubt xact resolution doit être défini sur 1 ou 2. Pour de plus amples informations, veuillez consulter Modification du paramètre pour MSDTC.

  • MSDTCexige que tous les hôtes participant à des transactions distribuées puissent être résolus à l'aide de leur nom d'hôte. RDSgère automatiquement cette fonctionnalité pour les instances jointes à un domaine. Toutefois, pour les instances autonomes, veillez à configurer le DNS serveur manuellement.

  • Les transactions Java Database Connectivity (JDBC) XA sont prises en charge pour SQL Server 2017 version 14.00.3223.3 et ultérieure, et Server 2019. SQL

  • Les transactions distribuées qui dépendent des bibliothèques de liens dynamiques clientes (DLLs) des RDS instances ne sont pas prises en charge.

  • L'utilisation de bibliothèques à liens dynamiques XA personnalisées n'est pas prise en charge.

Utilisation des transactions

Utilisation des transactions distribuées

Dans Amazon RDS for SQL Server, vous exécutez des transactions distribuées de la même manière que des transactions distribuées exécutées sur site :

  • En utilisant. NETframework de transactions System.Transactions promotables, qui optimise les transactions distribuées en reportant leur création jusqu'à ce qu'elles soient nécessaires.

    Dans ce cas, la promotion est automatique et ne nécessite aucune intervention de votre part. S'il n'y a qu'un gestionnaire de ressources dans la transaction, aucune promotion n'est effectuée. Pour de plus amples informations sur les portées des transactions implicites, veuillez consulter Implementing an Implicit Transaction using Transaction Scope dans la documentation Microsoft.

    Les transactions promotionnelles sont prises en charge avec celles-ci. NETimplémentations :

    • En commençant parADO. NET2.0, System.Data.SqlClient prend en charge les transactions promotionnelles avec le SQL serveur. Pour plus d'informations, consultez la section Intégration de System.Transactions au SQL serveur dans la documentation Microsoft.

    • ODP. NETsoutientSystem.Transactions. Une transaction locale est créée pour la première connexion ouverte dans la portée TransactionsScope à Oracle Database 11g version 1 (version 11.1) et ultérieures. Lorsqu'une deuxième connexion est ouverte, cette transaction est automatiquement promue en tant que transaction distribuée. Pour plus d'informations sur la prise en charge des transactions distribuées dansODP. NET, consultez la section Intégration de Microsoft Distributed Transaction Coordinator dans la documentation Microsoft.

  • Utilisation de l'instruction BEGIN DISTRIBUTED TRANSACTION. Pour plus d'informations, consultez BEGINDISTRIBUTEDTRANSACTION(Transact-SQL) dans la documentation Microsoft.

Utilisation de transactions XA

À partir de la RDS version 14.00.3223.3 de SQL Server 2017, vous pouvez contrôler les transactions distribuées à l'aide de. JDBC Lorsque vous définissez le paramètre d'Enable XAoption sur true dans l'MSDTCoption, les JDBC transactions RDS sont automatiquement activées et le SqlJDBCXAUser rôle est attribué à l'guestutilisateur. Cela permet d'exécuter des transactions distribuées viaJDBC. Pour plus d'informations, y compris pour voir un exemple de code, consultez Comprendre les transactions XA dans la documentation Microsoft.

Utilisation du suivi des transactions

RDSprend en charge le contrôle des traces de MSDTC transactions et leur téléchargement depuis l'RDSinstance de base de données à des fins de dépannage. Vous pouvez contrôler les sessions de suivi des transactions en exécutant la procédure RDS stockée suivante.

exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action', [@traceall='0|1'], [@traceaborted='0|1'], [@tracelong='0|1'];

Les paramètres suivants sont obligatoires :

  • trace_action – Action de suivi. Il peut être START, STOP ou STATUS.

Les paramètres suivants sont facultatifs :

  • @traceall – La valeur 1 permet de suivre toutes les transactions distribuées. La valeur par défaut est 0.

  • @traceaborted – La valeur 1 permet de suivre les transactions distribuées annulées. La valeur par défaut est 0.

  • @tracelong – La valeur 1 permet de suivre les transactions distribuées de longue durée. La valeur par défaut est 0.

Exemple de l'action de START traçage

Pour démarrer une nouvelle session de suivi des transactions, exécutez l'exemple d'instruction suivant.

exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
Note

Une seule session de suivi des transactions peut être active à la fois. Si une nouvelle commande START de session de suivi est émise alors qu'une session de suivi est active, une erreur est renvoyée et la session de suivi active reste inchangée.

Exemple de l'action de STOP traçage

Pour arrêter une session de suivi des transactions, exécutez l'instruction suivante.

exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'

Cette instruction arrête la session de suivi des transactions active et enregistre les données de suivi des transactions dans le répertoire des journaux de l'RDSinstance de base de données. La première ligne de la sortie contient le résultat global, et les lignes suivantes indiquent les détails de l'opération.

Vous trouverez ci-après un exemple d'arrêt de session de suivi réussi.

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

Vous pouvez utiliser les informations détaillées pour rechercher le nom du fichier journal généré. Pour plus d'informations sur le téléchargement de fichiers journaux depuis l'RDSinstance de base de données, consultezSurveillance des fichiers journaux RDSAmazon.

Les journaux de session de suivi sont conservés sur l'instance pendant 35 jours. Les journaux de session de suivi plus anciens sont automatiquement supprimés.

Exemple de l'action de STATUS traçage

Pour suivre le statut d'une session de suivi des transactions, exécutez l'instruction suivante.

exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'

Cette instruction affiche les éléments suivants sous forme de lignes séparées dans l'ensemble de résultats.

OK SessionStatus: <Started|Stopped> TraceAll: <True|False> TraceAborted: <True|False> TraceLongLived: <True|False>

La première ligne indique le résultat global de l'opération : OK ou ERROR avec des détails, le cas échéant. Les lignes suivantes indiquent des détails sur le statut de la session de suivi :

  • SessionStatus, les valeurs suivantes sont possibles :

    • Started si une session de suivi est en cours d'exécution.

    • Stopped si aucune session de suivi n'est en cours d'exécution.

  • Les indicateurs de session de suivi peuvent être True ou False en fonction de la façon dont ils ont été définis dans la commande START.