Oracle, Tek Bir Tabloya Karşı Birden Çok Eşzamanlı INSERT Nasıl İşler


8

Oracle 11g'yi biraz daha yakından anlamaya çalışıyorum. Sorum basit: Oracle, kayıtları aynı anda tek bir tabloya eklemeye çalışan iki oturumu nasıl ele alıyor?

Örneğin, INSERT A Tablo 1'e karşı 13: 00'da çalışır. Tamamlanması 5 dakika sürecektir. INSERT B, Tablo 1'e karşı 13:02'de yürütülür. Tamamlanması 1 dakika sürecektir.

Ne olacak? INSERT A tamamlandıktan sonra Oracle sırası INSERT B yürütülecek mi? INSERT B, INSERT A ile aynı anda çalışır mı?

Teşekkürler!


6
hiçbir şey görmek için kendiniz çalışırken yener :-)
Jack diyor denemek topanswers.xyz

Kesinlikle. Ancak, kasıtlı olarak tamamlamak için 5 dakika sürecek bir sorgu oluşturmak nasıl emin değilim.
Dustin

3
çok fazla veri eklensin mi? insert into foo(id) select level from dual connect by level<1000000(yeterince yavaş olana kadar birer birer sıfır sayısını arttırır)
Jack diyor ki topanswers.xyz

Yanıtlar:


4

Ekler, benzersiz veya birincil anahtar kısıtlamalarıyla çakışmadığı sürece birbirlerini etkilemez. Bağımsız olmalılar. Bu eşzamanlılık sorununun Oracle'ın dizisinin ayrı bir nesne (önbellek, yedek PK nesnesini insert'ten ayrılmış) olmasının nedenlerinden biri olduğuna inanıyorum.

Bu bağlamda, oturumlarında görüldüğü gibi, taahhüt edilmemiş masada faaliyet göstermektedirler. Bu davranış, aşağıdaki yığın akışı akışında açıklanır.

/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle


2

Belki de Oracle Transaction Management'a (Kavramlar) veya Uygulama Geliştiricileri için SQL İşleme'ye (Gelişmiş Uygulama Geliştirici Kılavuzu) göz atmakta fayda vardır.

Sqlplus ile bir oturum açarak oracle'in davranışını araştırabilirsiniz.

otomatik taahhüdü kapat

ve bir ekin çalıştırılması

tableA (...) değerlerine (...) ekleyin;

Bu oturumu açık bırakın ve başka bir pencereden sqlplus oturumu başlatın, otomatik komutu kapalı olarak ayarlayın ve başka bir ekleme yapın. Her iki işlem siz kesinleştirme (veya geri alma) ile kapatılıncaya kadar etkin olacaktır.

Çoğu durumda, otomatik değişikliği devre dışı bırakmak gerçekten gerekli değildir, çünkü bunu değiştirmediyseniz sqlplkus için bu varsayılan değerdir.

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.