Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Unterstützung für Microsoft Distributed Transaction Coordinator in RDS für SQL Server
Eine verteilte Transaktion ist eine Datenbanktransaktion, an der zwei oder mehr Netzwerkhosts beteiligt sind. RDS für SQL Server unterstützt verteilte Transaktionen zwischen Hosts, wobei ein einzelner Host einer der folgenden sein kann:
-
RDS für SQL Server-DB-Instance
-
Lokaler SQL Server-Host
-
Amazon EC2-Host mit installiertem SQL Server
-
Alle anderen EC2-Host- oder RDS-DB-Instances mit einer Datenbank-Engine, die verteilte Transaktionen unterstützt
In RDS, beginnend mit SQL Server 2012 (Version 11.00.5058.0.v1 und höher), unterstützen alle Editionen von RDS für SQL Server verteilte Transaktionen. Die Unterstützung wird mithilfe von Microsoft Distributed Transaction Coordinator (MSDTC) bereitgestellt. Ausführliche Informationen zu MSDTC finden Sie unter Distributed Transaction Coordinator
Inhalt
Einschränkungen
Die folgenden Einschränkungen gelten für die Verwendung von MSDTC auf RDS für SQL Server:
-
MSDTC wird auf Instances, welche die SQL Server-Datenbankspiegelung verwenden, nicht unterstützt. Weitere Informationen finden Sie unter Transaktionen - Verfügbarkeitsgruppen und Datenbankspiegelung
. -
Der Parameter
in-doubt xact resolutionmuss auf 1 oder 2 gesetzt werden. Weitere Informationen finden Sie unter Ändern des Parameters für MSDTC. -
MSDTC erfordert, dass alle Hosts, die an verteilten Transaktionen beteiligt sind, mit ihren Hostnamen auflösbar sind. RDS verwaltet diese Funktionalität automatisch für domänengebundene Instances. Achten Sie jedoch bei eigenständigen Instances darauf, den DNS-Server manuell zu konfigurieren.
-
XA-Transaktionen (Java Database Connectivity) werden für SQL Server 2017, Version 14.00.3223.3 und höher, und SQL Server 2019, unterstützt.
-
Verteilte Transaktionen, die auf RDS-Instances von Client Dynamic Link Libraries (DLLs) abhängen, werden nicht unterstützt.
-
Die Verwendung benutzerdefinierter dynamischer XA-Verknüpfungsbibliotheken wird nicht unterstützt.
Verwenden von Transaktionen
Verwenden verteilter Transaktionen
In Amazon RDS für SQL Server führen Sie verteilte Transaktionen auf die gleiche Weise aus wie verteilte Transaktionen, die lokal ausgeführt werden:
-
Mithilfe von heraufstufbaren
System.Transactions-Transaktionen im .NET Framework, die verteilte Transaktionen optimieren, indem ihre Erstellung so lange verschoben wird, bis sie benötigt werden.In diesem Fall erfolgt die Heraufstufung automatisch und erfordert keine Intervention. Wenn nur ein Ressourcenmanager innerhalb der Transaktion vorhanden ist, wird keine Heraufstufung durchgeführt. Weitere Informationen zu impliziten Transaktionsbereichen finden Sie unter Implementieren einer impliziten Transaktion mit Transaktionsbereich
in der Microsoft-Dokumentation. Heraufstufbare Transaktionen werden mit folgenden .NET-Implementierungen unterstützt:
-
Beginnend mit ADO.NET 2.0 unterstützt
System.Data.SqlClientheraufstufbare Transaktionen mit SQL Server. Weitere Informationen finden Sie unter System.Transactions-Integration in SQL Serverin der Microsoft-Dokumentation. -
ODP.NET unterstützt
System.Transactions. Für die erste Verbindung, die imTransactionsScope-Bereich zu Oracle Database 11g Release 1 (Version 11.1) und höher geöffnet wurde, wird eine lokale Transaktion erstellt. Wenn eine zweite Verbindung geöffnet wird, wird diese Transaktion automatisch zu einer verteilten Transaktion heraufgestuft. Weitere Informationen zur Unterstützung verteilter Transaktionen in ODP.NET finden Sie unter Microsoft Distributed Transaction Coordinator-Integrationin der Microsoft-Dokumentation.
-
-
Verwenden der
BEGIN DISTRIBUTED TRANSACTION-Anweisung. Weitere Informationen finden Sie unter BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)in der Microsoft-Dokumentation.
XA-Transaktionen verwenden
Ab RDS für SQL Server 2017, Version 14.00.3223.3, können Sie verteilte Transaktionen mit JDBC steuern. Wenn Sie dieEnable XAOptionseinstellung auftrueimMSDTCaktiviert, aktiviert RDS automatisch JDBC-Transaktionen und gewährt dieSqlJDBCXAUser-Rolle auf dieguest-Benutzer. Dies ermöglicht die Ausführung verteilter Transaktionen über JDBC. Weitere Informationen, einschließlich eines Code-Beispiels, finden Sie unter unter.XA-Transaktionen
Verwenden der Transaktionsnachverfolgung
RDS unterstützt die Steuerung von MSDTC-Transaktionsnachverfolgungen und deren Herunterladen aus der RDS-DB-Instance zur Fehlerbehebung. Sie können Transaktionsnachverfolgungssitzungen steuern, indem Sie die folgende gespeicherte RDS-Prozedur ausführen.
exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action', [@traceall='0|1'], [@traceaborted='0|1'], [@tracelong='0|1'];
Der folgende Parameter ist erforderlich:
-
trace_action– Die Nachverfolgungsaktion. Sie kannSTART,STOPoderSTATUSsein.
Die folgenden Parameter sind optional:
-
@traceall– Setzen Sie auf 1, um alle verteilten Transaktionen nachzuverfolgen. Der Standardwert ist 0. -
@traceaborted– Setzen Sie auf 1, um abgebrochene verteilte Transaktionen nachzuverfolgen. Der Standardwert ist 0. -
@tracelong– Setzen Sie auf 1, um zeitintensive verteilte Transaktionen zu verfolgen. Der Standardwert ist 0.
Beispiel mit START-Nachverfolgungsaktion
Um eine neue Transaktionsnachverfolgungssitzung zu starten, führen Sie die folgende Beispielanweisung aus.
exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
Anmerkung
Es kann nur eine Transaktionsnachverfolgungssitzung gleichzeitig aktiv sein. Wenn ein neuer START-Befehl für die Nachverfolgungssitzung ausgegeben wird, während eine Nachverfolgungssitzung aktiv ist, wird ein Fehler zurückgegeben, und die aktive Nachverfolgungssitzung bleibt unverändert.
Beispiel mit STOP-Nachverfolgungsaktion
Um eine Transaktionsnachverfolgungssitzung zu beenden, führen Sie die folgende Anweisung aus.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
Diese Anweisung stoppt die aktive Transaktionsnachverfolgungssitzung und speichert die Transaktionsnachverfolgungsdaten im Protokollverzeichnis der RDS-DB-Instance. Die erste Zeile der Ausgabe enthält das Gesamtergebnis und die folgenden Zeilen zeigen Details der Operation an.
Im Folgenden finden Sie ein Beispiel für einen erfolgreichen Sitzungsstopp der Nachverfolgung.
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
Mit den detaillierten Informationen können Sie den Namen der generierten Protokolldatei abfragen. Weitere Informationen zum Herunterladen von Protokolldateien aus der RDS-DB-Instance finden Sie unter Überwachen von Amazon RDS-Protokolldateien.
Die Nachverfolgungssitzungsprotokolle verbleiben 35 Tage lang auf der Instance. Ältere Nachverfolgungssitzungsprotokolle werden automatisch gelöscht.
Beispiel mit STATUS-Nachverfolgungsaktion
Um den Status einer Transaktionsnachverfolgungssitzung nachzuverfolgen, führen Sie die folgende Anweisung aus.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
Diese Anweisung gibt Folgendes als separate Zeilen der Ergebnismenge aus.
OK SessionStatus: <Started|Stopped> TraceAll: <True|False> TraceAborted: <True|False> TraceLongLived: <True|False>
Die erste Zeile gibt das Gesamtergebnis der Operation an: OK oder gegebenenfalls ERROR mit Details. Die folgenden Zeilen zeigen Details zum Status der Nachverfolgungssitzung an:
-
SessionStatuskann einer der folgenden sein:-
Started, wenn eine Nachverfolgungssitzung ausgeführt wird. -
Stopped, wenn keine Nachverfolgungssitzung ausgeführt wird.
-
-
Die Protokollierungssitzungs-Flags können
TrueoderFalseabhängig davon sein, wie sie imSTART-Befehl festgelegt wurden.