Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dukungan untuk Microsoft Distributed Transaction Coordinator di RDS for SQL Server
Transaksi terdistribusi adalah transaksi basis data yang melibatkan dua atau beberapa host jaringan. Amazon RDS for SQL Server mendukung transaksi terdistribusi di antara host, dengan satu host dapat menjadi salah satu opsi berikut ini:
-
Instans DB RDS for SQL Server
-
Host SQL Server on-premise
-
Host Amazon EC2 dengan SQL Server diinstal
-
Semua host EC2 atau instans DB RDS lainnya dengan mesin basis data yang mendukung transaksi terdistribusi
Di RDS, dimulai dengan SQL Server 2012 (versi 11.00.5058.0.v1 dan yang lebih baru), semua edisi RDS for SQL Server mendukung transaksi terdistribusi. Dukungan disediakan menggunakan Microsoft Distributed Transaction Coordinator (MSDTC). Untuk informasi mendalam tentang MSDTC, lihat Distributed Transaction Coordinator
Daftar Isi
Batasan
Batasan berikut berlaku untuk penggunaan MSDTC di RDS for SQL Server:
-
MSDTC tidak didukung pada instans yang menggunakan SQL Server Database Mirroring. Untuk informasi selengkapnya, lihat Transactions - availability groups and database mirroring
. -
Parameter
in-doubt xact resolutionharus diatur ke 1 atau 2. Untuk informasi selengkapnya, lihat Memodifikasi parameter untuk MSDTC. -
MSDTC mengharuskan semua host yang berpartisipasi dalam transaksi terdistribusi dapat diselesaikan menggunakan nama host-nya. RDS akan otomatis mempertahankan fungsionalitas ini untuk instans yang bergabung dengan domain. Namun, untuk instans mandiri, pastikan Anda mengonfigurasi server DNS secara manual.
-
Transaksi XA Java Database Connectivity (JDBC) didukung untuk SQL Server 2017 versi 14.00.3223.3 dan yang lebih tinggi, serta SQL Server 2019.
-
Transaksi terdistribusi yang bergantung pada pustaka tautan dinamis klien (DLLs) pada instance RDS tidak didukung.
-
Penggunaan pustaka tautan dinamis XA kustom tidak didukung.
Menggunakan transaksi
Menggunakan transaksi terdistribusi
Di Amazon RDS for SQL Server, Anda dapat menjalankan transaksi terdistribusi dengan cara yang sama seperti transaksi terdistribusi yang berjalan on-premise:
-
Menggunakan transaksi yang dapat dipromosikan .NET framework
System.Transactions, yang mengoptimalkan transaksi terdistribusi dengan menunda pembuatannya hingga diperlukan.Dalam hal ini, promosi bersifat otomatis dan tidak mengharuskan Anda untuk melakukan intervensi apa pun. Jika hanya ada satu pengelola sumber daya dalam transaksi, tidak ada promosi yang dilakukan. Untuk informasi selengkapnya tentang cakupan transaksi implisit, lihat Implementing an implicit transaction using transaction scope
dalam dokumentasi Microsoft. Transaksi yang dapat dipromosikan didukung dengan implementasi .NET ini:
-
Dimulai dengan ADO.NET 2.0,
System.Data.SqlClientmendukung transaksi yang dapat dipromosikan dengan SQL Server. Untuk informasi selengkapnya, lihat System.Transactions integration with SQL Serverdalam dokumentasi Microsoft. -
ODP.NET mendukung
System.Transactions. Transaksi lokal dibuat untuk koneksi pertama yang dibuka dalam cakupanTransactionsScopeke Oracle Database 11g rilis 1 (versi 11.1) dan yang lebih baru. Ketika koneksi kedua dibuka, transaksi ini akan otomatis dipromosikan menjadi transaksi terdistribusi. Untuk informasi dukungan transaksi terdistribusi di ODP.NET selengkapnya, lihat Microsoft Distributed Transaction Coordinator integrationdalam dokumentasi Microsoft.
-
-
Menggunakan pernyataan
BEGIN DISTRIBUTED TRANSACTION. Untuk informasi selengkapnya, lihat BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)dalam dokumentasi Microsoft.
Menggunakan transaksi XA
Mulai dari RDS for SQL Server 2017 versi 14.00.3223.3, Anda dapat mengontrol transaksi terdistribusi menggunakan JDBC. Saat Anda mengatur pengaturan opsi Enable XA ke true dalam opsi MSDTC, RDS akan otomatis mengaktifkan transaksi JDBC dan memberikan peran SqlJDBCXAUser tersebut kepada pengguna guest. Tindakan ini akan memungkinkan pelaksanaan transaksi terdistribusi melalui JDBC. Untuk informasi selengkapnya, termasuk contoh kode, lihat Understanding XA transactions
Menggunakan pelacakan transaksi
RDS mendukung pengendalian jejak transaksi MSDTC dan mengunduhnya dari instans DB RDS untuk memecahkan masalah. Anda dapat mengontrol sesi pelacakan transaksi dengan menjalankan prosedur RDS berikut.
exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action', [@traceall='0|1'], [@traceaborted='0|1'], [@tracelong='0|1'];
Parameter berikut diperlukan:
-
trace_action– Tindakan pelacakan. Tindakan tersebut dapat berupaSTART,STOP, atauSTATUS.
Parameter berikut ini bersifat opsional:
-
@traceall– Atur ke 1 untuk melacak semua transaksi terdistribusi. Default-nya adalah 0. -
@traceaborted– Atur ke 1 untuk melacak transaksi terdistribusi yang dibatalkan. Default-nya adalah 0. -
@tracelong– Atur ke 1 untuk melacak transaksi terdistribusi yang berlangsung lama. Default-nya adalah 0.
contoh tindakan pelacakan START
Untuk memulai sesi pelacakan transaksi baru, jalankan pernyataan contoh berikut.
exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
catatan
Hanya satu sesi pelacakan transaksi yang dapat aktif pada satu waktu. Jika perintah sesi pelacakan START dikeluarkan saat sesi pelacakan aktif, kesalahan akan dikembalikan dan sesi pelacakan aktif tetap tidak berubah.
contoh tindakan pelacakan STOP
Untuk menghentikan sesi pelacakan transaksi, jalankan pernyataan berikut.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
Pernyataan ini akan menghentikan sesi pelacakan transaksi aktif dan menyimpan data jejak transaksi ke direktori log di instans DB RDS. Baris pertama output berisi hasil keseluruhan, dan baris berikutnya menunjukkan detail operasi.
Berikut ini adalah contoh penghentian sesi pelacakan yang berhasil.
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
Anda dapat menggunakan informasi terperinci untuk mencari nama file log yang dihasilkan. Untuk informasi selengkapnya tentang pengunduhan file log dari instans DB RDS, lihat Memantau file RDS Amazon.
Log sesi pelacakan tetap berada di instans selama 35 hari. Semua log sesi pelacakan yang lebih lama akan otomatis dihapus.
contoh tindakan pelacakan STATUS
Untuk melacak status sesi pelacakan transaksi, jalankan pernyataan berikut.
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
Pernyataan ini menghasilkan informasi berikut sebagai baris kumpulan hasil yang terpisah.
OK SessionStatus: <Started|Stopped> TraceAll: <True|False> TraceAborted: <True|False> TraceLongLived: <True|False>
Baris pertama menunjukkan hasil keseluruhan dari operasi: OK atau ERROR beserta detail, jika ada. Baris berikutnya menunjukkan detail status sesi pelacakan:
-
SessionStatusdapat berupa salah satu status berikut:-
Startedjika sesi pelacakan berjalan. -
Stoppedjika tidak ada sesi pelacakan yang berjalan.
-
-
Tanda sesi pelacakan bisa bernilai
TrueatauFalsebergantung pada pengaturannya dalam perintahSTART.