

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
+ Host SQL Server locale
+ 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 librerie di collegamento dinamico del client (DLLs) sulle istanze RDS non sono supportate.
+ L'utilizzo di librerie a collegamento dinamico XA personalizzate non è supportato.

# Abilitazione di MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

Utilizzare il seguente processo per abilitare MSDTC per l'istanza database:

1. Creare un nuovo gruppo di opzioni oppure utilizzare un gruppo di opzioni esistente.

1. Aggiungere l'opzione `MSDTC` al gruppo di opzioni.

1. Creare un nuovo gruppo di parametri o scegliere un gruppo di parametri esistente.

1. Modificare il gruppo di parametri per impostare il parametro `in-doubt xact resolution` su 1 o 2.

1. Associare il gruppo di opzioni e il gruppo di parametri all'istanza database.

## Creazione del gruppo di opzioni per MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

Utilizzare la Console di gestione AWS o AWS CLI per creare un gruppo di opzioni che corrisponde al motore SQL Server e alla versione dell'istanza database.

**Nota**  
È inoltre possibile utilizzare un gruppo di opzioni esistente se si tratta del motore e della versione di SQL Server corretti.

### Console
<a name="OptionGroup.MSDTC.Console"></a>

La seguente procedura crea un gruppo di opzioni per SQL Server Standard Edition 2016.

**Per creare il gruppo di opzioni**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel riquadro di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Seleziona **Create group** (Crea gruppo).

1. Nella finestra **Create option group (Crea gruppo di opzioni)** eseguire queste operazioni:

   1. Per **Nome**, immettere un nome per il gruppo di opzioni che sia univoco all'interno dell'account AWS, ad esempio **msdtc-se-2016**. Il nome può includere solo lettere, cifre e trattini.

   1. Per **Descrizione**, immettere una breve descrizione del gruppo di opzioni, ad esempio **MSDTC option group for SQL Server SE 2016**. La descrizione viene usata per la visualizzazione. 

   1. Per **Engine (Motore)**, scegliere **sqlserver-se**.

   1. Per **Versione del motore principale**, scegliere **13.00**.

1. Scegli **Create** (Crea).

### CLI
<a name="OptionGroup.MSDTC.CLI"></a>

Nell'esempio seguente viene creato un gruppo di opzioni per SQL Server Standard Edition 2016.

**Per creare il gruppo di opzioni**
+ Utilizzare uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds create-option-group \
      --option-group-name msdtc-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

  Per Windows:

  ```
  aws rds create-option-group ^
      --option-group-name msdtc-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

## Aggiunta dell'opzione MSDTC al gruppo di opzioni
<a name="Appendix.SQLServer.Options.MSDTC.Add"></a>

Utilizzare la Console di gestione AWS o l'AWS CLI per aggiungere l'opzione `MSDTC` al gruppo di opzioni.

Sono richieste le seguenti impostazioni delle opzioni:
+ **Porta** – La porta utilizzata per accedere a MSDTC. I valori consentiti sono compresi tra 1150 e 49151, ad eccezione di 1234, 1434, 3260, 3343, 3389 e 47001. Il valore predefinito è 5000.

  Assicurarsi che la porta che si desidera utilizzare sia abilitata nelle regole del firewall. Assicurarsi, inoltre, che, se necessario, questa porta sia abilitata nelle regole in entrata e in uscita per il gruppo di sicurezza associato all'istanza database. Per ulteriori informazioni, consulta [Impossibile connettersi all'istanza database di Amazon RDS](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting). 
+ **Security groups** (Gruppi di sicurezza): le appartenenze a gruppi di sicurezza VPC per l'istanza database RDS.
+ **Tipo di autenticazione** – La modalità di autenticazione tra gli host. Sono supportati i seguenti tipi di autenticazione:
  + Reciproco – Le istanze RDS vengono autenticate reciprocamente l'una con l'altra utilizzando l'autenticazione integrata. Se questa opzione è selezionata, tutte le istanze associate a questo gruppo di opzioni devono essere aggiunte al dominio.
  + Nessuna – Nessuna autenticazione viene eseguita tra gli host. Non è consigliabile utilizzare questa modalità in ambienti di produzione.
+ **Dimensione del log delle transazioni** – La dimensione del log delle transazioni MSDTC. I valori consentiti sono compresi tra 4 e 1024 MB. La dimensione predefinita è 4 MB.

Le seguenti impostazioni delle opzioni sono facoltative:
+ **Abilitazione delle connessioni in entrata** – Indica se consentire connessioni MSDTC in entrata alle istanze associate a questo gruppo di opzioni.
+ **Abilitazione delle connessioni in uscita** – Indica se consentire connessioni MSDTC in uscita dalle istanze associate a questo gruppo di opzioni.
+ **Abilita XA** – Indica se consentire transazioni XA. Per ulteriori informazioni sul protocollo XA, consulta [XA Specification](https://publications.opengroup.org/c193).
+ **Abilita LU SNA** – Indica se consentire l'utilizzo del protocollo LU SNA per le transazioni distribuite. Per ulteriori informazioni sul supporto del protocollo LU SNA, consulta [Managing IBM CICS LU 6.2 Transactions](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms685136(v=vs.85)) nella documentazione Microsoft.

### Console
<a name="Options.MSDTC.Add.Console"></a>

**Per aggiungere l'opzione MSDTC**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel riquadro di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Scegliere il gruppo di opzioni appena creato.

1. Scegliere **Add option (Aggiungi opzione)**.

1. In **Dettagli opzione**, scegliere **MSDTC** per **Nome opzione**.

1. In **Impostazioni delle opzioni**:

   1. Per **Porta**, immettere il numero di porta per accedere a MSDTC. L'impostazione predefinita è **5000**.

   1. Per **Security groups (Gruppi di sicurezza)**, scegliere il gruppo di sicurezza VPC da associare all'opzione.

   1. Per **Tipo di autenticazione**, scegliere **Reciproco** o **Nessuna**.

   1. Per **Dimensioni del log delle transazioni**, immettere un valore compreso tra 4 e 1024. Il valore di default è **4**.

1. In **Configurazione aggiuntiva**, eseguire le operazioni seguenti:

   1. Per **Connessioni**, se necessario, scegliere **Abilitazione delle connessioni in entrata** e **Abilitazione delle connessioni in uscita**.

   1. Per **Protocolli consentiti**, se necessario, scegliere **Abilita XA** e **Abilita LU SNA**.

1. In **Scheduling (Pianificazione)**, scegliere se aggiungere l'opzione immediatamente o alla finestra di manutenzione successiva.

1. Scegliere **Add option (Aggiungi opzione)**.

   Per aggiungere questa opzione, non è richiesto alcun riavvio.

### CLI
<a name="Options.MSDTC.Add.CLI"></a>

**Per aggiungere l'opzione MSDTC**

1. Creare un file JSON, ad esempio `msdtc-option.json`, con i seguenti parametri obbligatori.

   ```
   {
   "OptionGroupName":"msdtc-se-2016",
   "OptionsToInclude": [
   	{
   	"OptionName":"MSDTC",
   	"Port":5000,
   	"VpcSecurityGroupMemberships":["sg-0abcdef123"],
   	"OptionSettings":[{"Name":"AUTHENTICATION","Value":"MUTUAL"},{"Name":"TRANSACTION_LOG_SIZE","Value":"4"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. Aggiungere l'opzione `MSDTC` al gruppo di opzioni.  
**Example**  

   Per Linux, macOS o Unix:

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://msdtc-option.json \
       --apply-immediately
   ```

   Per Windows:

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://msdtc-option.json ^
       --apply-immediately
   ```

   Non è richiesto alcun riavvio.

## Creazione del gruppo di parametri per MSDTC
<a name="MSDTC.CreateParamGroup"></a>

Creare o modificare un gruppo di parametri per il parametro `in-doubt xact resolution` corrispondente all'edizione di SQL Server e alla versione dell'istanza database.

### Console
<a name="CreateParamGroup.MSDTC.Console"></a>

Nell'esempio seguente viene creato un gruppo di parametri per SQL Server Standard Edition 2016.

**Per creare il gruppo di parametri**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel riquadro di navigazione scegliere **Parameter groups (Gruppi di parametri)**.

1. Scegliere **Create parameter group (Crea gruppo di parametri)**.

1. Nel riquadro **Create parameter group (Crea gruppi di parametri)**, procedi nel modo seguente:

   1. Per **Famiglia del gruppo di parametri**, scegliere **sqlserver-se-13.0**.

   1. Per **Group name (Nome gruppo)**, immettere un identificatore per il gruppo di parametri, ad esempio **msdtc-sqlserver-se-13**.

   1. Per **Description (Descrizione)**, immettere **in-doubt xact resolution**.

1. Scegli **Create** (Crea).

### CLI
<a name="CreateParamGroup.MSDTC.CLI"></a>

Nell'esempio seguente viene creato un gruppo di parametri per SQL Server Standard Edition 2016.

**Per creare il gruppo di parametri**
+ Utilizzare uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "in-doubt xact resolution"
  ```

  Per Windows:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "in-doubt xact resolution"
  ```

## Modifica del parametro per MSDTC
<a name="ModifyParam.MSDTC"></a>

Modifica il parametro `in-doubt xact resolution` nel gruppo di parametri che corrisponde all'edizione di SQL Server e alla versione dell'istanza database.

Per MSDTC, impostare il parametro `in-doubt xact resolution` su una delle seguenti opzioni:
+ `1` - `Presume commit`. Si ipotizza che sia stato eseguito il commit di tutte le transazioni dubbie MSDTC.
+ `2` - `Presume abort`. Si ipotizza che tutte le transazioni dubbie MSDTC siano state interrotte.

Per ulteriori informazioni, consulta [in-doubt xact resolution Server Configuration Option](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option) nella documentazione Microsoft.

### Console
<a name="ModifyParam.MSDTC.Console"></a>

Nell'esempio seguente il gruppo di parametri creato per SQL Server Standard Edition 2016 viene modificato.

**Per modificare il gruppo di parametri**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel pannello di navigazione, scegli **Parameter groups** (Gruppi di parametri).

1. Scegliere il gruppo di parametri, ad esempio **msdtc-sqlserver-se-13**.

1. In **Parameters (Parametri)**, filtrare l'elenco dei parametri per **xact**.

1. Scegliere **in-doubt xact resolution**.

1. Scegliere **Edit parameters (Modifica parametri)**.

1. Immetti **1** o **2**.

1. Seleziona **Save changes** (Salva modifiche).

### CLI
<a name="ModifyParam.MSDTC.CLI"></a>

Nell'esempio seguente il gruppo di parametri creato per SQL Server Standard Edition 2016 viene modificato.

**Per modificare il gruppo di parametri**
+ Utilizzare uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

  Per Windows:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

## Associazione del gruppo di opzioni e del gruppo di parametri all'istanza database
<a name="MSDTC.Apply"></a>

Puoi utilizzare la Console di gestione AWS o AWS CLI per associare il gruppo di opzioni MSDTC e il gruppo di parametri all'istanza database.

### Console
<a name="MSDTC.Apply.Console"></a>

Puoi associare il gruppo di opzioni MSDTC e il gruppo di parametri a un'istanza database nuova o esistente.
+ Per una nuova istanza database, associarli all'avvio dell'istanza. Per ulteriori informazioni, consulta [Creazione di un'istanza database Amazon RDS](USER_CreateDBInstance.md).
+ Per un'istanza database esistente, associarli modificando l'istanza. Per ulteriori informazioni, consulta [Modifica di un'istanza database Amazon RDS](Overview.DBInstance.Modifying.md).
**Nota**  
Se utilizzi un'istanza database esistente aggiunta la dominio, ad essa devono già essere associati un dominio Active Directory e un ruolo AWS Identity and Access Management (IAM). Se crei una nuova istanza aggiunta la dominio, specifica un dominio Active Directory e un ruolo IAM esistenti. Per ulteriori informazioni, consulta [Utilizzo di Active Directory AWS gestita con RDS per SQL Server](USER_SQLServerWinAuth.md).

### CLI
<a name="MSDTC.Apply.CLI"></a>

Puoi associare il gruppo di opzioni MSDTC e il gruppo di parametri a un'istanza database nuova o esistente.

**Nota**  
Se utilizzi un'istanza database aggiunta la dominio esistente, ad essa devono già essere associati un dominio Active Directory e un ruolo IAM. Se crei una nuova istanza aggiunta la dominio, specifica un dominio Active Directory e un ruolo IAM esistenti. Per ulteriori informazioni, consulta [Utilizzo di Active Directory AWS gestita con RDS per SQL Server](USER_SQLServerWinAuth.md).

**Per creare un'istanza database con il gruppo di opzioni MSDTC e il gruppo di parametri**
+ Specificare lo stesso tipo di motore del database e la versione principale utilizzati durante la creazione del gruppo di opzioni.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

  Per Windows:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

**Per modificare un'istanza database e associare il gruppo di opzioni MSDTC e il gruppo di parametri**
+ Utilizzare uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --apply-immediately
  ```

  Per Windows:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --apply-immediately
  ```

## Modifica dell'opzione MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Modify"></a>

Dopo aver abilitato l'opzione `MSDTC`, puoi modificarne le impostazioni. Per informazioni su come modificare le impostazioni dell'opzione, consulta [Modifica di un'impostazione di un'opzione](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption).

**Nota**  
Alcune modifiche alle impostazioni delle opzioni MSDTC richiedono il riavvio del servizio MSDTC. Questo requisito può influenzare l'esecuzione di transazioni distribuite.

## 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 da ADO.NET 2.0, `System.Data.SqlClient` supporta le transazioni promuovibili con SQL Server. Per ulteriori informazioni, consulta [System.Transactions Integration with SQL Server](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server) nella documentazione Microsoft.
  + ODP.NET supporta `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 di transazioni distribuite in ODP.NET, consulta [Microsoft Distributed Transaction Coordinator Integration](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, consulta [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`.

# Disabilitazione di MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Disable"></a>

Per disabilitare MSDTC, rimuovere l'opzione `MSDTC` dal relativo gruppo di opzioni.

## Console
<a name="Options.MSDTC.Disable.Console"></a>

**Per rimuovere l'opzione MSDTC dal suo gruppo di opzioni**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Nel riquadro di navigazione scegliere **Option groups (Gruppi di opzioni)**.

1. Scegliere il gruppo di opzioni con l'opzione `MSDTC` (`msdtc-se-2016` negli esempi precedenti).

1. Scegliere **Delete option (Elimina opzione)**.

1. In **Opzioni di eliminazione**, scegliere **MSDTC** per **Opzioni da eliminare**.

1. In **Apply immediately (Applica immediatamente)**, scegliere **Yes (Sì)** per eliminare immediatamente l'opzione oppure **No** per eliminarla nella finestra di manutenzione successiva.

1. Scegliere **Delete** (Elimina).

## CLI
<a name="Options.MSDTC.Disable.CLI"></a>

**Per rimuovere l'opzione MSDTC dal suo gruppo di opzioni**
+ Utilizzare uno dei seguenti comandi.  
**Example**  

  Per Linux, macOS o Unix:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name msdtc-se-2016 \
      --options MSDTC \
      --apply-immediately
  ```

  Per Windows:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name msdtc-se-2016 ^
      --options MSDTC ^
      --apply-immediately
  ```

# Risoluzione dei problemi relativi a MSDTC per RDS for SQL Server
<a name="Appendix.SQLServer.Options.MSDTC.Troubleshooting"></a>

In alcuni casi, potrebbero verificarsi problemi durante il tentativo di stabilire una connessione tra MSDTC in esecuzione su un computer client e il servizio MSDTC in esecuzione in un'istanza database RDS for SQL Server. In tal caso, assicurati che siano soddisfatte le seguenti condizioni:
+ Le regole in entrata per il gruppo di sicurezza associato all'istanza database sono configurate correttamente. Per ulteriori informazioni, consulta [Impossibile connettersi all'istanza database di Amazon RDS](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting).
+ Il computer client è configurato correttamente.
+ Le regole del firewall MSDTC sul computer client sono abilitate.

**Per configurare il computer client**

1. Aprire **Servizi di componenti**.

   Oppure, in **Server Manager**, scegliere **Strumenti** e quindi **Servizi di componenti**.

1. Espandere **Servizi di componenti**, espandere **Computer**, espandere **Risorse del computer** e quindi espandere **Distributed Transaction Coordinator**.

1. Aprire il menu contestuale (pulsante destro del mouse) per **DTC locale** e scegliere **Proprietà**.

1. Scegliere la scheda **Sicurezza** .

1. Scegliere tutte le opzioni seguenti:
   + **Accesso DTC di rete**
   + **Consenti in entrata**
   + **Consenti in uscita**

1. Assicurarsi di scegliere la modalità di autenticazione corretta:
   + **Autenticazione reciproca obbligatoria** – Il computer client viene aggiunto allo stesso dominio di altri nodi che partecipano alla transazione distribuita oppure esiste una relazione di attendibilità configurata tra domini.
   + **Nessuna autenticazione richiesta** – Tutti gli altri casi.

1. Scegliere **OK** per salvare le modifiche.

1. Se viene richiesto di riavviare il servizio, scegliere **Sì**.

**Per abilitare le regole firewall MSDTC**

1. Aprire Windows Firewall, quindi scegliere **Impostazioni avanzate**.

   Oppure, in **Server Manager**, scegliere **Strumenti**, quindi selezionare **Windows Firewall con sicurezza avanzata**.
**Nota**  
A seconda del sistema operativo in uso, Windows Firewall potrebbe essere chiamato Windows Defender Firewall.

1. Scegliere **Regole in entrata** nel riquadro sinistro.

1. Abilitare le regole del firewall riportate di seguito, se non sono già abilitate:
   + **Distributed Transaction Coordinator (RPC)**
   + **Distributed Transaction Coordinator (RPC)-EPMAP**
   + **Distributed Transaction Coordinator (TCP-In)**

1. Chiudere Windows Firewall.