

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Supporto per Microsoft Distributed Transaction Coordinator in RDS per SQL Server
<a name="Appendix.SQLServer.Options.MSDTC"></a>

Una *transazione distribuita* è una transazione di database in cui sono coinvolti due o più host di rete. RDS per SQL Server supporta transazioni distribuite tra host, in cui un singolo host può essere uno dei seguenti:
+ Istanza database RDS per SQL Server
+ On-premises Host SQL Server
+ Host Amazon EC2 con SQL Server installato
+ Qualsiasi altro host EC2 o istanza database RDS con un motore del database che supporta le transazioni distribuite

In RDS, a partire da SQL Server 2012 (versione 11.00.5058.0.v1 e successive), tutte le edizioni di RDS per SQL Server supportano le transazioni distribuite. Il supporto viene fornito utilizzando Microsoft Distributed Transaction Coordinator (MSDTC). Per informazioni dettagliate su MSDTC, consulta [Distributed Transaction Coordinator](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85)) nella documentazione Microsoft.

**Contents**
+ [Limitazioni](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [Abilitazione di MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [Creazione del gruppo di opzioni per MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [Aggiunta dell'opzione MSDTC al gruppo di opzioni](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [Creazione del gruppo di parametri per MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [Modifica del parametro per MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [Associazione del gruppo di opzioni e del gruppo di parametri all'istanza database](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [Modifica dell'opzione MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [Utilizzo di transazioni](#Appendix.SQLServer.Options.MSDTC.Using)
  + [Utilizzo di transazioni distribuite](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [Utilizzo di transazioni XA](#MSDTC.XA)
  + [Utilizzo del tracciamento delle transazioni](#MSDTC.Tracing)
+ [Disabilitazione di MSDTC](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [Risoluzione dei problemi relativi a MSDTC per RDS for SQL Server](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

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

Le seguenti limitazioni si applicano all'utilizzo di MSDTC su RDS per SQL Server:
+ MSDTC non è supportato nelle istanze che utilizzano il mirroring del database SQL Server. Per ulteriori informazioni, consulta [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).
+ Il parametro `in-doubt xact resolution` deve essere impostato su 1 o 2. Per ulteriori informazioni, consulta [Modifica del parametro per MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC).
+ MSDTC richiede che tutti i nomi host che partecipano alle transazioni distribuite siano risolvibili utilizzando i nomi host. RDS mantiene automaticamente questa funzionalità per le istanze aggiunte al dominio. Tuttavia, per le istanze standalone assicurarsi di configurare manualmente il server DNS.
+ le transazioni XA di Java Database Connectivity (JDBC) sono supportate per SQL Server 2017 versione 14.00.3223.3 e successive e SQL Server 2019.
+ Le transazioni distribuite che dipendono dalle DLL client nelle istanze RDS non sono supportate.
+ L'utilizzo di librerie a collegamento dinamico XA personalizzate non è supportato.

## Utilizzo di transazioni
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### Utilizzo di transazioni distribuite
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

In Amazon RDS for SQL Server, le transazioni distribuite vengono eseguite allo stesso modo delle transazioni distribuite eseguite in locale:
+ Utilizzando le transazioni promuovibili `System.Transactions` di .NET Framework, che ottimizza le transazioni distribuite posticipandone la creazione fino a quando non sono necessarie.

  In questo caso, la promozione è automatica e non richiede alcun intervento. Se all'interno della transazione è presente un solo gestore risorse, non viene eseguita alcuna promozione. Per ulteriori informazioni sugli ambiti di transazioni implicite, consulta [Implementing an Implicit Transaction using Transaction Scope](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/implementing-an-implicit-transaction-using-transaction-scope) nella documentazione Microsoft.

  Le transazioni promuovibili sono supportate con queste implementazioni .NET: 
  + A partire dalla ADO.NET versione 2.0, `System.Data.SqlClient` supporta transazioni promosse con SQL Server. Per ulteriori informazioni, vedere [System.Transactions l'integrazione con SQL Server](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server) nella documentazione Microsoft.
  + ODP.NET supporti`System.Transactions`. Viene creata una transazione locale per la prima connessione nell'ambito `TransactionsScope` aperta a Oracle Database 11g release 1 (versione 11.1) e successive. Quando viene aperta una seconda connessione, questa transazione viene automaticamente promossa a una transazione distribuita. Per ulteriori informazioni sul supporto delle transazioni distribuite in ODP.NET, vedere l'[integrazione di Microsoft Distributed Transaction Coordinator](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html) nella documentazione Microsoft.
+ Utilizzando l'istruzione `BEGIN DISTRIBUTED TRANSACTION`. Per ulteriori informazioni, vedere [BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql) nella documentazione Microsoft.

### Utilizzo di transazioni XA
<a name="MSDTC.XA"></a>

A partire da RDS per SQL Server 2017 versione 14.00.3223.3, è possibile controllare transazioni distribuite utilizzando JDBC. Quando si imposta l'opzione `Enable XA` su `true` nell'opzione `MSDTC`, RDS abilita automaticamente le transazioni JDBC e concede il ruolo `SqlJDBCXAUser` all'utente `guest`. Ciò consente di eseguire transazioni distribuite tramite JDBC. Per ulteriori informazioni, tra cui un codice di esempio, consulta [Comprendere le transazioni XA](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions) nella documentazione di Microsoft.

### Utilizzo del tracciamento delle transazioni
<a name="MSDTC.Tracing"></a>

RDS supporta il controllo delle tracce delle transazioni MSDTC e il loro download dall'istanza database RDS per la risoluzione dei problemi. Puoi controllare le sessioni di tracciamento delle transazioni eseguendo la seguente stored procedure di RDS.

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

Il parametro seguente è obbligatorio:
+ `trace_action` – L'operazione di tracciamento. Può essere `START`, `STOP` o `STATUS`.

I parametri seguenti sono facoltativi:
+ `@traceall` – Impostare su 1 per tracciare tutte le transazioni distribuite. Il valore predefinito è 0.
+ `@traceaborted` – Impostare su 1 per tracciare le transazioni distribuite annullate. Il valore predefinito è 0.
+ `@tracelong` – Impostare su 1 per tracciare le transazioni distribuite di lunga durata. Il valore predefinito è 0.

**Example dell'operazione di tracciamento START**  
Per avviare una nuova sessione di tracciamento delle transazioni, eseguire l'istruzione di esempio seguente.  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='{{0}}',
@traceaborted='{{1}}',
@tracelong='{{1}}';
```
Può essere attiva una sola sessione di tracciamento delle transazioni alla volta. Se viene emesso un nuovo comando `START` di sessione di tracciamento mentre una sessione di tracciamento è attiva, viene restituito un errore e la sessione di tracciamento attiva rimane invariata.

**Example di operazione di tracciamento STOP**  
Per interrompere una sessione di tracciamento delle transazioni, eseguire l'istruzione seguente.  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
Questa istruzione interrompe la sessione di tracciamento delle transazioni attiva e salva i dati di tracciamento delle transazioni nella directory di log nell'istanza database RDS. La prima riga dell'output contiene il risultato complessivo dell'esecuzione e le righe seguenti indicano i dettagli dell'operazione.  
Di seguito è riportato un esempio di interruzione della sessione di tracciamento.  

```
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
```
Puoi utilizzare le informazioni dettagliate per eseguire query sul nome del file di log generato. Per ulteriori informazioni sul download dei file di log dall'istanza database RDS, consulta [Monitoraggio dei file di log di Amazon RDS](USER_LogAccess.md).  
I log delle sessioni di traccia rimangono sull'istanza per 35 giorni. Tutti i log delle sessioni di traccia più vecchi vengono eliminati automaticamente.

**Example dell'operazione di tracciamento STATUS**  
Per tracciare lo stato di una sessione di tracciamento delle transazioni, eseguire l'istruzione seguente.  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
```
Questa istruzione restituisce quanto segue come righe separate del set di risultati.  

```
OK
SessionStatus: <{{Started|Stopped}}>
TraceAll: <{{True|False}}>
TraceAborted: <{{True|False}}>
TraceLongLived: <{{True|False}}>
```
La prima riga indica il risultato complessivo dell'operazione: `OK` o `ERROR` con i dettagli, se applicabile. Le righe successive indicano i dettagli sullo stato della sessione di tracciamento:   
+ `SessionStatus`Il valore di può essere uno dei seguenti:
  + `Started` se una sessione di tracciamento è in esecuzione.
  + `Stopped` se nessuna sessione di tracciamento è in esecuzione.
+ I flag della sessione di tracciamento possono essere `True` o `False` a seconda di come sono stati impostati nel comando `START`.