Memahami kontrol konkurensi

Unduh driver JDBC

Kontrol konkurensi mengacu pada berbagai teknik yang digunakan untuk mempertahankan integritas database ketika beberapa pengguna memperbarui baris secara bersamaan. Konkurensi yang tidak tepat dapat menyebabkan masalah seperti pembacaan kotor, pembacaan phantom, dan pembacaan yang tidak dapat diulang. Driver Microsoft JDBC untuk SQL Server menyediakan antarmuka untuk semua teknik konkurensi yang digunakan oleh SQL Server untuk mengatasi masalah ini.

Catatan

Untuk informasi selengkapnya tentang konkurensi SQL Server, lihat "Mengelola Akses Data Bersamaan".

Keterangan

Driver JDBC mendukung jenis konkurensi berikut:

Jenis Konkurensi Karakteristik Kunci Baris Deskripsi
CONCUR_READ_ONLY Baca Saja Tidak Pembaruan melalui kursor tidak diizinkan, dan tidak ada penguncian yang diterapkan pada baris yang membentuk kumpulan hasil.
CONCUR_UPDATABLE Baca/Tulis Optimistis Tidak Basis data mengasumsikan perebutan akses pada baris kemungkinannya kecil, tetapi tetap mungkin terjadi. Integritas baris diperiksa dengan perbandingan tanda waktu.
CONCUR_SS_SCROLL_LOCKS Baca Tulis Pesimistis Ya Basis data menganggap kontensi baris mungkin terjadi. Integritas baris dijaga melalui penguncian baris.
CONCUR_SS_OPTIMISTIC_CC Baca/Tulis Optimistis Tidak Basis data mengasumsikan bahwa konflik pada baris kecil kemungkinannya, tetapi tetap mungkin. Integritas baris diverifikasi dengan perbandingan tanda waktu.

Untuk SQL Server 2005 (9.x) dan yang lebih baru, server akan mengubahnya menjadi CONCUR_SS_OPTIMISTIC_CCVAL jika tabel tidak berisi kolom tanda waktu.

Untuk SQL Server 2000 (8.x), jika tabel yang mendasarinya memiliki kolom timestamp, OPTIMISTIC WITH ROW VERSIONING digunakan bahkan jika OPTIMISTIC WITH VALUES ditetapkan. Jika OPTIMISTIC WITH ROW VERSIONING ditetapkan dan tabel tidak memiliki stempel waktu, OPTIMISTIC WITH VALUES digunakan.
CONCUR_SS_OPTIMISTIC_CCVAL Baca/Tulis Optimistis Tidak Database mengasumsikan bahwa kontensi pada baris kecil kemungkinannya, tetapi tetap mungkin. Integritas baris diperiksa dengan perbandingan data baris.

Tataan hasil yang tidak dapat diperbarui

Kumpulan hasil yang dapat diperbarui adalah tataan hasil di mana baris dapat disisipkan, diperbarui, dan dihapus. Dalam kasus berikut, SQL Server tidak dapat membuat kursor yang dapat diperbarui. Pengecualian yang dihasilkan adalah, "Tataan hasil tidak dapat diperbarui."

Penyebab Deskripsi Obat
Pernyataan tidak dibuat dengan menggunakan sintaks JDBC 2.0 (atau yang lebih baru) JDBC 2.0 memperkenalkan metode baru untuk membuat pernyataan. Jika sintaks JDBC 1.0 digunakan, result set secara default bersifat baca-saja. Tentukan jenis kumpulan hasil dan tingkat konkurensi saat membuat statement.
Pernyataan dibuat dengan menggunakan TYPE_SCROLL_INSENSITIVE SQL Server membuat kursor rekam jepret statis. Ini terputus dari baris tabel yang mendasarinya untuk membantu melindungi kursor dari perubahan pada baris yang dilakukan oleh pengguna lain. Gunakan TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC, atau TYPE_FORWARD_ONLY dengan CONCUR_UPDATABLE untuk menghindari pembuatan kursor statis.
Desain tabel menghalangi kursor KEYSET atau DYNAMIC Tabel yang mendasar tidak memiliki kunci unik untuk mengaktifkan SQL Server untuk mengidentifikasi baris secara unik. Tambahkan kunci unik ke tabel untuk memberikan identifikasi unik setiap baris.