Mengapa Oracle tidak memiliki nolock?

14

Dalam MS SQL Server nolockdapat digunakan untuk tujuan tersebut.

Mengapa kita tidak bisa menggunakannya di Oracle dan plsql?

sal
sumber

Jawaban:

21

SQL Server biasanya menggunakan strategi penguncian yang berbeda untuk Oracle. Strategi default yang digunakan oleh SQL Server berarti bahwa memilih baris menyebabkan kunci baca (pada baris, halaman atau seluruh tabel) ditempatkan pada mereka *. Oleh karena NOLOCKitu kadang-kadang klausa yang berguna - meskipun saran umum adalah untuk tidak pernah menggunakannya, karena mengubah semantik tingkat isolasi dan dapat menyebabkan hasil yang tidak konsisten dalam output kueri.

* (Catatan: itu adalah default. Jika SNAPSHOTisolasi dipilih, perilakunya berbeda dan pembaca tidak memblokir penulis.)

Di Oracle, proses membaca tidak akan pernah memblokir proses penulisan. Berikut ini adalah kutipan dari ' Oracle Database Concepts 11g Release 2 '. Saya mendorong Anda untuk melihat apakah Anda tertarik pada bagaimana ini ditangani oleh Oracle.

Konkurensi dan Konsistensi Data

Ringkasan Perilaku Mengunci

Basis data memelihara beberapa jenis kunci, tergantung pada operasi yang memperoleh kunci. Secara umum, database menggunakan dua jenis kunci: kunci eksklusif dan kunci berbagi. Hanya satu kunci eksklusif yang dapat diperoleh pada sumber daya seperti baris atau tabel, tetapi banyak kunci berbagi dapat diperoleh pada satu sumber daya.

Kunci mempengaruhi interaksi pembaca dan penulis. Pembaca adalah permintaan sumber daya, sedangkan penulis adalah pernyataan yang mengubah sumber daya. Aturan berikut merangkum perilaku penguncian dari Oracle Database untuk pembaca dan penulis:

• Baris dikunci hanya ketika dimodifikasi oleh penulis.

Ketika pernyataan memperbarui satu baris, transaksi memperoleh kunci untuk baris ini saja. Dengan mengunci data tabel di tingkat baris, database meminimalkan pertengkaran untuk data yang sama. Dalam keadaan normal 1, basis data tidak meningkatkan kunci baris ke tingkat blok atau tabel.

• Seorang penulis baris memblokir penulis bersamaan dari baris yang sama.

Jika satu transaksi memodifikasi baris, maka kunci baris mencegah transaksi yang berbeda dari memodifikasi baris yang sama secara bersamaan.

• Seorang pembaca tidak pernah menghalangi seorang penulis.

Karena pembaca baris tidak menguncinya, penulis dapat memodifikasi baris ini. Satu-satunya pengecualian adalah pernyataan SELECT ... FOR UPDATE, yang merupakan jenis khusus dari pernyataan SELECT yang mengunci baris yang sedang dibaca.

• Seorang penulis tidak pernah menghalangi pembaca.

Ketika suatu baris sedang diubah oleh penulis, database menggunakan undo data untuk memberikan pembaca dengan pandangan yang konsisten dari baris tersebut.

BriteSponge
sumber