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
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
Limitazioni
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
. -
Il parametro
in-doubt xact resolutiondeve essere impostato su 1 o 2. Per ulteriori informazioni, consulta Modifica del parametro per 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
Utilizzo di transazioni distribuite
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.Transactionsdi .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
nella documentazione Microsoft. Le transazioni promuovibili sono supportate con queste implementazioni .NET:
-
A partire da ADO.NET 2.0,
System.Data.SqlClientsupporta le transazioni promuovibili con SQL Server. Per ulteriori informazioni, consulta System.Transactions Integration with SQL Servernella documentazione Microsoft. -
ODP.NET supporta
System.Transactions. Viene creata una transazione locale per la prima connessione nell'ambitoTransactionsScopeaperta 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 Integrationnella documentazione Microsoft.
-
-
Utilizzando l'istruzione
BEGIN DISTRIBUTED TRANSACTION. Per ulteriori informazioni, consulta BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)nella documentazione Microsoft.
Utilizzo di transazioni XA
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
Utilizzo del tracciamento delle transazioni
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ò essereSTART,STOPoSTATUS.
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.
Esempio 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';
Nota
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.
Esempio 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.
I log delle sessioni di traccia rimangono sull'istanza per 35 giorni. Tutti i log delle sessioni di traccia più vecchi vengono eliminati automaticamente.
Esempio 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:
-
SessionStatusIl valore di può essere uno dei seguenti:-
Startedse una sessione di tracciamento è in esecuzione. -
Stoppedse nessuna sessione di tracciamento è in esecuzione.
-
-
I flag della sessione di tracciamento possono essere
TrueoFalsea seconda di come sono stati impostati nel comandoSTART.