Support per Microsoft Distributed Transaction Coordinator in RDS for Server SQL - Amazon Relational Database Service

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à.

Support per Microsoft Distributed Transaction Coordinator in RDS for Server SQL

Una transazione distribuita è una transazione di database in cui sono coinvolti due o più host di rete. RDSfor SQL Server supporta transazioni distribuite tra host, dove un singolo host può essere uno dei seguenti:

  • RDSper l'istanza SQL Server DB

  • Host SQL server locale

  • EC2Host Amazon con SQL server installato

  • Qualsiasi altro EC2 host o istanza RDS DB con un motore di database che supporti transazioni distribuite

A partire da SQL Server 2012 (versione 11.00.5058.0.v1 e successive), tutte le edizioni di RDS for Server supportano le transazioni distribuite. RDS SQL Il supporto viene fornito utilizzando Microsoft Distributed Transaction Coordinator (MSDTC). Per informazioni dettagliate suMSDTC, vedere Distributed Transaction Coordinator nella documentazione Microsoft.

Limitazioni

Le seguenti limitazioni si applicano all'utilizzo di MSDTC on RDS for SQL Server:

  • MSDTCnon è supportato nelle istanze che utilizzano SQL Server Database Mirroring. Per ulteriori informazioni, consulta Transactions - availability groups and database mirroring.

  • Il parametro in-doubt xact resolution deve essere impostato su 1 o 2. Per ulteriori informazioni, consulta Modifica del parametro per MSDTC.

  • MSDTCrichiede che tutti gli host che partecipano alle transazioni distribuite siano risolvibili utilizzando i rispettivi nomi host. RDSmantiene automaticamente questa funzionalità per le istanze aggiunte al dominio. Tuttavia, per le istanze autonome, assicurati di configurare il server manualmente. DNS

  • Le transazioni XA Java Database Connectivity (JDBC) sono supportate per SQL Server 2017 versione 14.00.3223.3 e successive e Server 2019. SQL

  • Le transazioni distribuite che dipendono dalle librerie di collegamento dinamico del client (DLLs) sulle RDS istanze non sono supportate.

  • L'utilizzo di librerie a collegamento dinamico XA personalizzate non è supportato.

Utilizzo delle transazioni

Utilizzo di transazioni distribuite

In Amazon RDS for SQL Server, esegui transazioni distribuite allo stesso modo delle transazioni distribuite eseguite in locale:

  • Usando. NETframework System.Transactions promotable transactions, che ottimizza le transazioni distribuite rimandandone 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 da queste. NETimplementazioni:

    • A partire da. ADO NET2.0, System.Data.SqlClient supporta transazioni promuovibili con SQL Server. Per ulteriori informazioni, vedere System.Transactions integration with SQL Server nella documentazione Microsoft.

    • ODP. NETsupportiSystem.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 inODP. NET, vedere l'integrazione con Microsoft Distributed Transaction Coordinator nella documentazione Microsoft.

  • Utilizzando l'istruzione BEGIN DISTRIBUTED TRANSACTION. Per ulteriori informazioni, vedere BEGINDISTRIBUTEDTRANSACTION(Transact-SQL) nella documentazione Microsoft.

Utilizzo di transazioni XA

A partire dalla RDS versione 14.00.3223.3 di SQL Server 2017, è possibile controllare le transazioni distribuite utilizzando. JDBC Quando si imposta l'impostazione dell'Enable XAopzione su true nell'MSDTCopzione, abilita RDS automaticamente JDBC le transazioni e concede il ruolo all'utente. SqlJDBCXAUser guest Ciò consente di eseguire transazioni distribuite tramiteJDBC. Per ulteriori informazioni, tra cui un codice di esempio, consulta Comprendere le transazioni XA nella documentazione di Microsoft.

Utilizzo del tracciamento delle transazioni

RDSsupporta il controllo MSDTC delle tracce delle transazioni e il loro download dall'istanza RDS DB per la risoluzione dei problemi. È possibile controllare le sessioni di tracciamento delle transazioni eseguendo la seguente procedura RDS memorizzata.

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.

Esempio dell'azione di START tracciamento

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 dell'azione di STOP tracciamento

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 traccia delle transazioni nella directory di registro dell'istanza RDS DB. 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 registro dall'istanza RDS DB, consultaMonitoraggio dei file di log di RDSAmazon.

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'azione di STATUS tracciamento

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:

    • 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.