Bagikan melalui


Transaksi terdistribusi

Transaksi adalah sekumpulan tugas terkait yang berhasil (menerapkan) atau pun yang gagal (membatalkan) sebagai unit, di antara yang lain. Sebuah transaksi terdistribusi adalah transaksi yang memengaruhi beberapa sumber daya. Agar transaksi terdistribusi untuk melakukan penerapan, semua peserta harus menjamin bahwa setiap perubahan pada data akan menjadi permanen. Perubahan harus tetap ada meskipun terjadi crash pada sistem atau terjadi peristiwa tak terduga lainnya. Bahkan jika satu peserta gagal membuat jaminan ini, maka seluruh transaksi gagal, dan setiap perubahan pada data dalam cakupan transaksi akan digulung balik.

Catatan

Pengecualian akan diterapkan jika Anda mencoba menerapkan atau menggulung balik transaksi jika DataReader dimulai saat transaksi aktif.

Bekerja dengan System.Transactions

Dalam .NET Framework, transaksi terdistribusi dikelola melalui API di System.Transactions namespace layanan. API System.Transactions akan mengirimkan penanganan transaksi terdistribusi ke monitor transaksi seperti Koordinator Transaksi Terdistribusi Microsoft (MS DTC) ketika beberapa manajer sumber daya persisten terlibat. Untuk informasi selengkapnya, lihat Dasar-Dasar Transaksi.

ADO.NET 2.0 memperkenalkan dukungan untuk mendaftar dalam transaksi terdistribusi menggunakan metode EnlistTransaction, yang mendaftarkan koneksi dalam Transaction instans. Dalam versi ADO.NET sebelumnya, pendaftaran eksplisit dalam transaksi terdistribusi dilakukan menggunakan metode koneksi EnlistDistributedTransaction untuk mendaftarkan koneksi dalam instans ITransaction, yang didukung untuk kompatibilitas mundur. Untuk informasi selengkapnya tentang transaksi Layanan Enterprise, lihat Interoperabilitas dengan Layanan Perusahaan dan Transaksi COM+.

Saat menggunakan transaksi System.Transactions dengan Penyedia .NET Framework untuk SQL Server terhadap database SQL Server, Transaction ringan akan secara otomatis digunakan. Transaksi kemudian dapat dipromosikan ke transaksi terdistribusi penuh sesuai kebutuhan. Untuk informasi selengkapnya, lihat Integrasi System.Transactions dengan SQL Server.

Catatan

Jumlah maksimum transaksi terdistribusi yang dapat diikuti database Oracle dalam satu waktu diatur ke 10 secara default. Setelah transaksi ke-10 saat tersambung ke database Oracle, pengecualian dilemparkan. Oracle tidak mendukung DDL di dalam transaksi terdistribusi.

Mendaftar secara otomatis dalam Transaksi Terdistribusi

Pendaftaran otomatis adalah cara default (dan pilihan) untuk mengintegrasikan koneksi ADO.NET dengan System.Transactions. Objek koneksi akan secara otomatis mendaftar dalam transaksi terdistribusi yang ada jika menentukan bahwa transaksi aktif, yang, dalam hal System.Transaction, berarti Transaction.Current tidak null. Pendaftaran transaksi otomatis terjadi ketika koneksi dibuka. Pendaftaran ini tidak akan terjadi setelah itu bahkan jika perintah dijalankan di dalam cakupan transaksi. Anda dapat menonaktifkan pendaftaran otomatis dalam transaksi yang ada dengan menentukan Enlist=false sebagai parameter string koneksi untuk SqlConnection.ConnectionString, atau OLE DB Services=-7 sebagai parameter string koneksi untuk OleDbConnection.ConnectionString. Untuk informasi selengkapnya tentang parameter string koneksi Oracle dan ODBC, lihat OracleConnection.ConnectionString dan OdbcConnection.ConnectionString.

Mendaftar secara Manual dalam Transaksi Terdistribusi

Jika pendaftaran otomatis dinonaktifkan atau Anda perlu mendaftarkan transaksi yang dimulai setelah koneksi dibuka, Anda dapat mendaftarkan transaksi terdistribusi yang ada menggunakan metode EnlistTransaction objek DbConnection untuk penyedia yang bekerja sama dengan Anda. Mendaftar dalam transaksi terdistribusi yang ada memastikan bahwa, jika transaksi diterapkan atau digulung balik, modifikasi yang dibuat oleh kode pada sumber data juga akan dilakukan atau digulung balik.

Mendaftar dalam transaksi terdistribusi sangat berlaku saat mengumpulkan objek bisnis. Jika objek bisnis dikumpulkan dengan koneksi terbuka, pendaftaran transaksi otomatis hanya terjadi saat koneksi tersebut dibuka. Jika beberapa transaksi dilakukan menggunakan objek bisnis yang dikumpulkan, koneksi terbuka untuk objek tersebut tidak akan secara otomatis mendaftar dalam transaksi yang baru dimulai. Dalam hal ini, Anda dapat menonaktifkan pendaftaran transaksi otomatis untuk koneksi dan mendaftarkan koneksi dalam transaksi menggunakan EnlistTransaction.

EnlistTransaction mengambil satu argumen jenis Transaction yang merupakan referensi ke transaksi yang ada. Setelah memanggil metode koneksi EnlistTransaction, semua modifikasi yang dilakukan pada sumber data menggunakan koneksi yang disertakan dalam transaksi. Meneruskan nilai null membatalkan daftar koneksi dari pendaftaran transaksi terdistribusi saat ini. Perhatikan bahwa koneksi harus dibuka sebelum memanggil EnlistTransaction.

Catatan

Setelah koneksi secara eksplisit terdaftar pada transaksi, koneksi tidak dapat membatalkan daftar atau terdaftar dalam transaksi lain sampai transaksi pertama selesai.

Perhatian

EnlistTransaction melempar pengecualian jika koneksi telah memulai transaksi menggunakan metode koneksi BeginTransaction. Namun, jika transaksi adalah transaksi lokal yang dimulai di sumber data (misalnya, menjalankan pernyataan BEGIN TRANSACTION secara eksplisit menggunakan SqlCommand), EnlistTransaction akan mengembalikan transaksi lokal dan mendaftarkan dalam transaksi terdistribusi yang ada seperti yang diminta. Anda tidak akan menerima pemberitahuan bahwa transaksi lokal digulung balik, dan harus mengelola transaksi lokal apa pun yang tidak mulai menggunakan BeginTransaction. Jika Anda menggunakan Penyedia Data .NET Framework untuk SQL Server (SqlClient) dengan SQL Server, upaya untuk mendaftar akan melemparkan pengecualian. Semua kasus lain tidak akan terdeteksi.

Transaksi yang Dapat Diproyeksikan dalam SQL Server

SQL Server mendukung transaksi yang dapat dipromosikan di mana transaksi ringan lokal dapat secara otomatis dipromosikan ke transaksi terdistribusi hanya jika diperlukan. Transaksi yang dapat diproyeksikan tidak memanggil overhead tambahan dari transaksi terdistribusi kecuali overhead yang ditambahkan diperlukan. Untuk informasi selengkapnya dan sampel kode, lihat Integrasi System.Transactions dengan SQL Server.

Mengonfigurasi Transaksi Terdistribusi

Anda mungkin perlu mengaktifkan MS DTC melalui jaringan untuk menggunakan transaksi terdistribusi. Jika firewall Windows diaktifkan, Anda harus mengizinkan layanan MS DTC untuk menggunakan jaringan atau membuka port MS DTC.

Lihat juga