

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
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*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
+ On-premises Host SQL Server
+ 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](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85)) dalam dokumentasi Microsoft.

**Contents**
+ [Batasan](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [Mengaktifkan MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [Membuat grup opsi untuk MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [Menambahkan opsi MSDTC ke grup opsi](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [Membuat grup parameter untuk MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [Memodifikasi parameter untuk MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [Mengaitkan grup opsi dan grup parameter dengan instans DB](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [Memodifikasi opsi MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [Menggunakan transaksi](#Appendix.SQLServer.Options.MSDTC.Using)
  + [Menggunakan transaksi terdistribusi](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [Menggunakan transaksi XA](#MSDTC.XA)
  + [Menggunakan pelacakan transaksi](#MSDTC.Tracing)
+ [Menonaktifkan MSDTC](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [Memecahkan Masalah MSDTC untuk RDS for SQL Server](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

## Batasan
<a name="Appendix.SQLServer.Options.MSDTC.Limitations"></a>

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](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-ver15#non-support-for-distributed-transactions).
+ Parameter `in-doubt xact resolution` harus diatur ke 1 atau 2. Untuk informasi selengkapnya, lihat [Memodifikasi parameter untuk MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.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 (DLL) klien pada instans RDS tidak didukung.
+ Penggunaan pustaka tautan dinamis XA kustom tidak didukung.

## Menggunakan transaksi
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### Menggunakan transaksi terdistribusi
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

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](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/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 integrasi dengan SQL Server](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server) di 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 selengkapnya tentang dukungan transaksi terdistribusi ODP.NET, lihat [Integrasi Koordinator Transaksi Terdistribusi Microsoft](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html) di dokumentasi Microsoft.
+ Menggunakan pernyataan `BEGIN DISTRIBUTED TRANSACTION`. Untuk informasi selengkapnya, lihat [MULAI TRANSAKSI TERDISTRIBUSI (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql) di dokumentasi Microsoft.

### Menggunakan transaksi XA
<a name="MSDTC.XA"></a>

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](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions) dalam dokumentasi Microsoft.

### Menggunakan pelacakan transaksi
<a name="MSDTC.Tracing"></a>

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.

**Example 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}}';
```
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.

**Example 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 log Amazon RDS](USER_LogAccess.md).  
Log sesi pelacakan tetap berada di instans selama 35 hari. Semua log sesi pelacakan yang lebih lama akan otomatis dihapus.

**Example 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`.