Genellikle çeşitli kilitler nedeniyle sürecin serbest bırakılmadığı sistemle karşılaşırız.Genel yöntem kilidi açmak için oturumu kapatmaktır.Bu bölüme bakmak için bir dakikanızı ayırın. Kaç kilit modu var? Bugün esas olarak bu bölümü tanıtacağım.
0: yok
1: boş boş
2: Satır-S satır paylaşımı (RS): paylaşılan tablo kilidi
3: Satır-X satır ayrılmış (RX): satır değişikliği için kullanılır
4: Paylaşılan kilidi (S) paylaş: diğer DML işlemlerini engelle
5: S / Row-X paylaşımlı satır ayrılmış (SRX): diğer işlem işlemlerini engelleyin
6: özel (X): bağımsız erişim
Seviye 1 kilitleri şunlardır: Bazen v $ locked_object'te görünen seçin.
Seviye 2 kilitleri şunlardır: Güncelleme için seçin, Güncelleme İçin Kilitle, Satır Paylaşımını Kilitle
güncelleme için seçin İletişim kutusu bir imleci açmak için for update alt dizesini kullandığında, döndürülen kümedeki tüm veri satırları yalnızca satır düzeyinde kilitlenir (Satır-X) Diğer nesneler yalnızca bu veri satırlarını sorgulayabilir ve güncelleyemez, silemez veya güncelleme işlemi için seçin.
Üç kilit seviyesi şunlardır: Ekle, Güncelle, Sil, Satır Hariç Kilitle
Kaydetmeden önce aynı kaydı eklemek yanıt vermeyecektir, çünkü sonraki 3 kilit her zaman önceki 3 kilidi bekleyecektir ve çalışmaya devam etmek için bir öncekini serbest bırakmalıyız.
Seviye 4 kilitler şunlardır: Dizin Oluştur, Paylaşımı Kilitle kilitli modu 2, 3, 4, DML (ekleme, silme, güncelleme, seçme) işlemlerini etkilemez, ancak DDL (değiştirme, bırakma vb.) İşlemleri veya bir-00054 hatası verir.
ORA-00054: kaynak meşgul ve NOWAIT ile edinme belirtildi
(ORA-00054: Kaynak meşgul, ancak kaynağı elde etmek için NOWAIT yöntemi belirtildi)
Seviye 5 kilitleri şunlardır: Özel Satır Paylaşımı Kilitle
Özellikle, birincil ve yabancı anahtar kısıtlamaları olduğunda, güncelle / sil ...; 4,5 kilit oluşturabilir.
Üst tablo değiştirildiğinde, alt tabloya karşılık gelen kayıt varsa, ORA-02292 oluşturulur
İstisna; aksi takdirde, üst tabloya yalnızca TX kilidi ve RX kilidi eklenir;
Alt tabloyu değiştirirken, alt tabloya TX kilidi ve RX kilidi eklemeye ek olarak; üst tablo için
Mantıksal olan SS kilidi de eklenir, çünkü üst tablonun şu anda bilgi tutarlılığını karşılaması gerekir;
Yani, şu anda üst tabloyu değiştirmekten kaçınmak için üst tabloya SS kilidi ekleyin.
Yukarıdaki kilitte bahsedilen değişiklikler, alt ve üst tablolarda bilgi tutarlılığına sahip alanlardaki tüm işlemlerdir.
6 kilit seviyesi şunlardır: Tabloyu değiştir, Tabloyu düşür, Düşürme Endeksi, Tabloyu Kes, Özel Kilitle
1. Geçerli oturum kimliğini görüntüleyin:
a12 için col sahibi a30 için col object_name a32 için col makinesi a16 için col USERNAME a16 için col OSUSER rownum nerede v $ mystat dan sid seçin < = 1;2. Mevcut oturum durumunu görüntüleyin:
v $ oturumundan makine, kullanıcı adı, sid, seri #, tür, osuser, durumu seçin;3. Veritabanındaki mevcut kilit durumunu kontrol edin
Aşağıdaki SQL ifadesini kullanabilirsiniz:
s.username, o.object_name, s.machine, s.sid, s.serial #, k.type seçin v $ locked_object l'den, dba_objects o, v $ oturum s, v $ lock k burada l.object_id = o.object_id ve l.session_id = s.sid ve k.sid = s.sid;4. Kilidi açın
Uzun süre görünen bir sütun varsa, yayınlanmamış bir kilit olabilir. Uzun süredir serbest bırakılmayan anormal kilitleri öldürmek için aşağıdaki SQL ifadesini kullanabiliriz:
sistem öldürme oturum kimliğini değiştir, seri # ';Bir kilit sorunu varsa, bir DML işlemi yanıt vermeden uzun süre bekleyebilir. Yukarıdaki komutla bir işlemi sonlandırdıktan sonra, işlem durumu "öldürüldü" olarak ayarlandıysa, ancak kilitli kaynak uzun süre serbest bırakılmadıysa, ilgili işlemi (iş parçacığı) işletim sistemi düzeyinde öldürebilirsiniz, önce aşağıdakileri yürütün İşlem (iş parçacığı) numarasını almak için ifade:
spid, osuser, s.programı seçin v $ oturum s, v $ işlem p burada s.paddr = p.addr ve s.sid = # sid (#sid yukarıda bulunan siddir)5. İşletim sisteminde süreci (iş parçacığı) sonlandırın:
1) Unix'te, komutu root olarak yürütün:
#kill -9 #spid (yukarıda bulunan örümcek)2) Pencerelerde iş parçacığı öldürmek için orakill kullanın, orakill oracle tarafından sağlanan çalıştırılabilir bir komuttur, sözdizimi şöyledir:
orakill sid iplikonların arasında:
sid: sonlandırılacak işlemin ait olduğu vaka adını belirtir
thread: öldürülmesi gereken iplik numarasıdır, yani yukarıda bulunan örümcek.
Satır Özel (RX): INSERT, UPDATE, DELETE
Satır Paylaşımı (RS): GÜNCELLEME İÇİN SEÇİN ...
Her ikisi de DML işlemleri tarafından tutulan TM masa kilidi modlarıdır. Hala birkaç fark var, biri farklı olmaları. İkinci olarak, rx kilitlendikten sonra, diğer işlemler değiştirilen sonuçları bile okuyamaz. Ve rs, diğer işlemleri okurken sorun değildir, bu nedenle buna rs denir.
Hepsi diğer işlemlerin tabloyu tablo düzeyinde manuel olarak kilitlemesini engeller kısmına atıfta bulunsa da, biri özel okuma veya yazma için, diğeri ise özel yazma erişimi içindir.
Kilitlerle ilgili 6 mod ve ortak komutlar burada tanıtıldı. İlgileniyorsanız, derinlemesine çalışabilirsiniz. Daha sonra daha fazla DBA içeriği paylaşacağız ve ilgilenen arkadaşlar buna dikkat edebilir ~