Oracle'ın neden kilidi yok?


14

MS SQL Server'da nolock amaç için kullanılabilir.

Neden Oracle ve plsql'de kullanamıyoruz?

Yanıtlar:


21

SQL Server normalde Oracle için farklı bir kilitleme stratejisi kullanır. SQL Server tarafından kullanılan varsayılan strateji, satır seçmenin, okuma kilitlerinin (satırlarda, sayfalarda veya tüm tabloda) üzerlerine yerleştirilmesine neden olduğu anlamına gelir *. Bu nedenle NOLOCKbazen yararlı bir cümledir - genel tavsiye asla kullanmamaktır, çünkü izolasyon seviyelerinin anlambilimini değiştirir ve sorguların çıktısında tutarsız sonuçlara neden olabilir.

* (Not: bu varsayılan ayardır. SNAPSHOTYalıtım seçilirse, davranış farklıdır ve okuyucular yazarları engellemez.)

Oracle'da okuma işlemi hiçbir zaman yazma işlemini engellemez. Aşağıdaki ' Oracle Database Concepts 11g Sürüm 2'den bir alıntıdır. . Bunun Oracle tarafından nasıl ele alındığı ile ilgileniyorsanız bir göz atmanızı öneririm.

Veri Eşzamanlılığı ve Tutarlılığı

Kilitleme Davranışının Özeti

Veritabanı, kilidi alan işleme bağlı olarak çeşitli kilit türlerini korur. Genel olarak, veritabanı iki tür kilit kullanır: özel kilitler ve paylaşım kilitleri. Satır veya tablo gibi bir kaynakta yalnızca bir özel kilit elde edilebilir, ancak tek bir kaynak üzerinde birçok paylaşım kilidi elde edilebilir.

Kilitler okuyucuların ve yazarların etkileşimini etkiler. Okuyucu kaynağın sorgusudur, yazar ise kaynağı değiştiren bir ifadedir. Aşağıdaki kurallar, okuyucular ve yazarlar için Oracle Database'in kilitleme davranışını özetler:

• Bir satır yalnızca bir yazar tarafından değiştirildiğinde kilitlenir.

Bir ifade bir satırı güncellediğinde, işlem yalnızca bu satır için bir kilit alır. Tablo verilerini satır düzeyinde kilitleyerek, veritabanı aynı verilerin çekişmesini en aza indirir. Normal şartlar altında 1 veritabanı bir satır kilidini blok veya tablo düzeyine yükseltmez.

• Bir satırın yazarı, aynı satırın eşzamanlı bir yazarını engeller.

Bir işlem bir satırı değiştiriyorsa, bir satır kilidi farklı bir işlemin aynı satırı aynı anda değiştirmesini önler.

• Bir okuyucu hiçbir zaman bir yazarı engellemez.

Bir satır okuyucusu onu kilitlemediğinden, bir yazar bu satırı değiştirebilir. Tek istisna, okuduğu satırı kilitleyen özel bir SELECT deyimi türü olan bir SELECT ... FOR UPDATE deyimidir.

• Bir yazar asla okuyucuyu engellemez.

Bir satır bir yazar tarafından değiştirildiğinde, veritabanı okuyuculara satırın tutarlı bir görünümünü sağlamak için geri alma verilerini kullanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.