

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.

# Prise en charge de Microsoft Distributed Transaction Coordinator dans RDS for SQL Server
<a name="Appendix.SQLServer.Options.MSDTC"></a>

Une *transaction distribuée* est une transaction de base de données dans laquelle deux hôtes réseau ou plus sont impliqués. RDS for SQL Server prend en charge les transactions distribuées entre hôtes tels que :
+ Instance de base de données RDS for SQL Server
+ On-premises Hôte SQL Server
+ Hôte Amazon EC2 avec SQL Server installé
+ Tout autre hôte EC2 ou instance de base de données RDS avec un moteur de base de données prenant en charge les transactions distribuées

Dans RDS, à partir de SQL Server 2012 (versions 11.00.5058.0.v1 et ultérieures), toutes les éditions de RDS for SQL Server prennent en charge les transactions distribuées. La prise en charge est fournie via Microsoft Distributed Transaction Coordinator (MSDTC). Pour plus d’informations sur MSDTC, consultez [Distributed Transaction Coordinator](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85)) dans la documentation Microsoft.

**Contents**
+ [Limitations](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [Activation de MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [Création du groupe d'options pour MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [Ajout de l'option MSDTC au groupe d'options](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [Création du groupe de paramètres pour MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [Modification du paramètre pour MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [Association du groupe d'options et du groupe de paramètres à l'instance de base de données](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [Modification de l'option MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [Utilisation de transactions](#Appendix.SQLServer.Options.MSDTC.Using)
  + [Utilisation des transactions distribuées](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [Utilisation de transactions XA](#MSDTC.XA)
  + [Utilisation du suivi des transactions](#MSDTC.Tracing)
+ [Désactivation de MSDTC](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [Dépannage de MSDTC pour RDS for SQL Server](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

## Limitations
<a name="Appendix.SQLServer.Options.MSDTC.Limitations"></a>

Les limitations suivantes s'appliquent à l'utilisation de MSDTC sur RDS for SQL Server :
+ MSDTC n'est pas pris en charge sur les instances utilisant la mise en miroir de base de données SQL Server. Pour plus d’informations, consultez [Transactions - availability groups and database mirroring](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-ver15#non-support-for-distributed-transactions).
+ Le paramètre `in-doubt xact resolution` doit être défini sur 1 ou 2. Pour plus d’informations, consultez [Modification du paramètre pour MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC).
+ MSDTC exige que tous les hôtes participant à des transactions distribuées soient résolubles à l'aide de leur nom d'hôte. RDS gère automatiquement cette fonctionnalité pour les instances jointes au domaine. Toutefois, pour les instances autonomes, assurez-vous de configurer manuellement le serveur DNS.
+ Les transactions Java Database Connectivity (JDBC) XA sont prises en charge pour SQL Server 2017 versions 14.00.3223.3 et ultérieures, et pour SQL Server 2019.
+ Les transactions distribuées qui dépendent de bibliothèques de liens dynamiques clientes (DLL) sur des instances RDS ne sont pas prises en charge.
+ L'utilisation de bibliothèques à liens dynamiques XA personnalisées n'est pas prise en charge.

## Utilisation de transactions
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### Utilisation des transactions distribuées
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

Dans Amazon RDS for SQL Server, vous exécutez des transactions distribuées de la même manière que les transactions distribuées exécutées sur site :
+ Utilisation des transactions `System.Transactions` .NET framework susceptibles d'être promues, ce 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 plus d’informations sur les portées des transactions implicites, consultez [Implementing an Implicit Transaction using Transaction Scope](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/implementing-an-implicit-transaction-using-transaction-scope) dans la documentation Microsoft.

  Les transactions susceptibles d'être promues sont prises en charge avec les implémentations .NET suivantes : 
  + À partir de la ADO.NET version 2.0, `System.Data.SqlClient` prend en charge les transactions promotionnelles avec SQL Server. Pour plus d'informations, consultez la section [System.Transactions Intégration à SQL Server](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server) dans la documentation Microsoft.
  + ODP.NET soutient`System.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 dans ODP.NET, consultez la section [Intégration de Microsoft Distributed Transaction Coordinator](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html) dans la documentation Microsoft.
+ Utilisation de l'instruction `BEGIN DISTRIBUTED TRANSACTION`. Pour plus d'informations, consultez [BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql) dans la documentation Microsoft.

### Utilisation de transactions XA
<a name="MSDTC.XA"></a>

À partir de RDS for SQL Server 2017 version14.00.3223.3, vous pouvez contrôler les transactions distribuées à l'aide de JDBC. Lorsque vous définissez le paramètre `Enable XA` sur `true` dans l'option `MSDTC`, RDS active automatiquement les transactions JDBC et accorde le rôle `SqlJDBCXAUser` à l'utilisateur `guest`. Cela permet d'exécuter des transactions distribuées via JDBC. Pour plus d'informations, y compris pour voir un exemple de code, consultez [Comprendre les transactions XA](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions) dans la documentation Microsoft.

### Utilisation du suivi des transactions
<a name="MSDTC.Tracing"></a>

RDS prend en charge le contrôle des suivis de transaction MSDTC et leur téléchargement à partir de l'instance de base de données RDS pour le dépannage. Vous pouvez contrôler les sessions de suivi de transaction en exécutant la procédure stockée RDS 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.

**Example de l'action de suivi START**  
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}}';
```
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.

**Example de l'action de suivi STOP**  
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 active de suivi des transactions et enregistre les données de suivi des transactions dans le répertoire de journal de l'instance de base de données RDS. 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 à partir de l’instance de base de données RDS, consultez [Surveillance des fichiers journaux Amazon RDS](USER_LogAccess.md).  
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.

**Example de l'action de suivi STATUS**  
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`.