Dukungan untuk Microsoft Distributed Transaction Coordinator di RDS for SQL Server - Layanan Basis Data Relasional Amazon

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 dalam dokumentasi Microsoft.

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 resolution harus 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.SqlClient mendukung transaksi yang dapat dipromosikan dengan SQL Server. Untuk informasi selengkapnya, lihat System.Transactions integration with SQL Server dalam dokumentasi Microsoft.

    • ODP.NET mendukung System.Transactions. Transaksi lokal dibuat untuk koneksi pertama yang dibuka dalam cakupan TransactionsScope ke 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 integration dalam 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 dalam dokumentasi Microsoft.

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 berupa START, STOP, atau STATUS.

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:

  • SessionStatus dapat berupa salah satu status berikut:

    • Started jika sesi pelacakan berjalan.

    • Stopped jika tidak ada sesi pelacakan yang berjalan.

  • Tanda sesi pelacakan bisa bernilai True atau False bergantung pada pengaturannya dalam perintah START.