Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Transaksi menentukan tingkat isolasi yang menentukan bagaimana satu transaksi diisolasi dari transaksi lain. Isolasi adalah pemisahan modifikasi sumber daya atau data yang dilakukan oleh transaksi yang berbeda. Tingkat isolasi menjelaskan efek samping konkurensi mana yang diizinkan, seperti pembacaan kotor atau pembacaan fantom.
Tingkat isolasi transaksi mengontrol efek berikut:
Apakah kunci diambil saat data dibaca, dan jenis kunci apa yang diminta.
Berapa lama kunci baca dipertahankan.
Apakah operasi pembacaan merujuk pada baris yang dimodifikasi oleh transaksi lain:
Tunggu hingga kunci eksklusif pada baris dilepaskan.
Ambil versi baris yang telah dikomit yang ada pada saat pernyataan atau transaksi dimulai.
Baca modifikasi data yang belum dikomitkan.
Memilih tingkat isolasi
Memilih tingkat isolasi transaksi tidak memengaruhi kunci yang diperoleh untuk melindungi modifikasi data. Transaksi selalu mendapatkan kunci eksklusif pada data apa pun yang dimodifikasinya. Ini menahan kunci itu sampai transaksi selesai, apa pun tingkat isolasi yang ditetapkan untuk transaksi tersebut. Untuk operasi baca, tingkat isolasi transaksi terutama menentukan bagaimana operasi dilindungi dari efek transaksi lain.
Tingkat isolasi yang lebih rendah meningkatkan kemampuan banyak pengguna untuk mengakses data secara bersamaan. Tetapi hal ini meningkatkan jumlah dampak konkurensi, seperti pembacaan kotor atau pembaruan yang hilang, yang mungkin dialami pengguna. Sebaliknya, tingkat isolasi yang lebih tinggi mengurangi jenis efek konkurensi yang mungkin dilihat pengguna. Tetapi membutuhkan lebih banyak sumber daya sistem dan meningkatkan kemungkinan satu transaksi akan memblokir transaksi lain. Memilih tingkat isolasi yang sesuai tergantung pada penyeimbangan persyaratan integritas data aplikasi terhadap overhead setiap tingkat isolasi.
Tingkat isolasi tertinggi, dapat diserialisasikan, menjamin bahwa transaksi akan mengambil data yang sama persis setiap kali mengulangi operasi baca. Namun, sistem ini menggunakan tingkat penguncian yang kemungkinan besar akan memengaruhi pengguna lain dalam sistem multi-pengguna. Tingkat isolasi terendah, read uncommitted, dapat mengambil data yang telah dimodifikasi tetapi belum dikomitkan oleh transaksi lain. Semua efek samping konkurensi dapat terjadi dalam mode read uncommitted, namun tidak ada penguncian baca atau pembuatan versi, sehingga beban tambahan diminimalkan.
Keterangan
Tabel berikut menunjukkan efek samping konkurensi yang diizinkan oleh berbagai tingkat isolasi.
| Tingkat Isolasi | Bacaan Kotor | Bacaan Yang Tidak Dapat Diulang | Hantu |
|---|---|---|---|
| Baca yang belum dikomitkan | Ya | Ya | Ya |
| Pembacaan yang diterapkan | Tidak | Ya | Ya |
| Pembacaan berulang | Tidak | Tidak | Ya |
| Cuplikan | Tidak | Tidak | Tidak |
| Serializable | Tidak | Tidak | Tidak |
Transaksi harus dijalankan pada tingkat isolasi dari setidaknya bacaan berulang untuk mencegah pembaruan yang hilang yang dapat terjadi ketika dua transaksi masing-masing mengambil baris yang sama. Transaksi kemudian memperbarui baris berdasarkan nilai yang awalnya diambil. Jika dua transaksi memperbarui baris menggunakan satu UPDATE pernyataan dan tidak mendasarkan pembaruan pada nilai yang diambil sebelumnya, pembaruan yang hilang tidak dapat terjadi pada tingkat isolasi default baca yang diterapkan.
Untuk mengatur tingkat isolasi untuk transaksi, Anda dapat menggunakan metode setTransactionIsolation dari kelas SQLServerConnection . Metode ini menerima nilai int sebagai argumennya, yang didasarkan pada salah satu konstanta koneksi seperti dalam hal berikut:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Untuk menggunakan tingkat isolasi rekam jepret baru SQL Server, Anda dapat menggunakan salah SQLServerConnection satu konstanta:
con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);
atau Anda dapat menggunakan:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);
Untuk informasi selengkapnya tentang tingkat isolasi SQL Server, lihat "Tingkat Isolasi di Mesin Database" di Buku SQL Server Online.