Locklanan Objeleri ve Session’ları Gösteren SQL

YUNUS EMRE ATAY

SELECT 
    lo.inst_id,
    s.sid,
    s.serial#,
    s.username,
    s.osuser,
    s.machine,
    s.program,
    lo.oracle_username,
    o.owner,
    o.object_name,
    o.object_type,
    CASE lo.locked_mode
        WHEN 0 THEN 'None'
        WHEN 1 THEN 'Null'
        WHEN 2 THEN 'Row-S (SS)'
        WHEN 3 THEN 'Row-X (SX)'
        WHEN 4 THEN 'Share'
        WHEN 5 THEN 'S/Row-X (SSX)'
        WHEN 6 THEN 'Exclusive'
        ELSE 'Unknown'
    END AS lock_mode,
    s.status,
    s.logon_time
FROM gv$locked_object lo
JOIN dba_objects o 
    ON lo.object_id = o.object_id
JOIN gv$session s 
    ON lo.session_id = s.sid
   AND lo.inst_id = s.inst_id
ORDER BY lo.inst_id, s.sid;

🧠 Açıklama

Bu sorgu, Oracle Database üzerinde:

👉 Hangi session hangi objeyi hangi lock ile kilitlemiş
sorusunun cevabını detaylı şekilde verir.

Özellikle:

  • Lock problemlerini analiz etmek
  • Blocking session’ları bulmak
  • DML/DDL çakışmalarını incelemek
    için kullanılır.

📦 Kullanılan View’lar

🔹 GV$LOCKED_OBJECT

  • Kilitlenen objeleri getirir
  • Hangi session’ın lock tuttuğunu gösterir

🔹 DBA_OBJECTS

  • Object ID → object name çevirisi yapılır
  • Tablo, index, vb. bilgileri verir

🔹 GV$SESSION

  • Session detaylarını verir:
    • kullanıcı
    • makine
    • program
    • durum

🔑 Kolon Açıklamaları

👤 Session Bilgileri

  • SID / SERIAL# → Session kimliği (kill etmek için kullanılır)
  • USERNAME → Oracle kullanıcısı
  • OSUSER → İşletim sistemi kullanıcısı
  • MACHINE → Bağlanılan client makine
  • PROGRAM → Uygulama (örn: JDBC, TOAD)

📦 Object Bilgileri

  • OWNER → Schema sahibi
  • OBJECT_NAME → Kilitlenen obje
  • OBJECT_TYPE → TABLE / INDEX / vb.

🔒 Lock Bilgisi

🔹 0 — None

👉 Kilitleme yok

  • Objede aktif bir lock yoktur
  • Genelde transient (geçici) durumlarda görülür

🧠 Yorum:

Çoğu zaman pratikte çok anlamlı değildir

🔹 1 — Null (N)

👉 En düşük seviyeli lock

  • Aslında “gerçek” bir kilit değildir
  • Sadece:
    • obje üzerinde bir işlem yapılabileceğini gösterir

👉 Özellik:

  • Hiçbir şeyi bloklamaz
  • Diğer tüm lock’larla uyumludur

🧠 Yorum:

Oracle’ın içsel lock mekanizması için placeholder gibi çalışır

🔹 2 — Row-S (SS – Row Share)

👉 Satır seviyesinde işlem yapılacak

  • Genelde:
    • SELECT ... FOR UPDATE

👉 Özellik:

  • ✔️ Okuma serbest
  • ✔️ DML genelde serbest
  • ❌ Güçlü lock’lar engellenir

🧠 Yorum:

“Ben satırlarla ilgileniyorum, ama sistemi kilitlemiyorum”

🔹 3 — Row-X (SX – Row Exclusive)

👉 DML işlemi var

  • Oluşur:
    • INSERT
    • UPDATE
    • DELETE

👉 Özellik:

  • ✔️ Okuma serbest
  • ✔️ Diğer DML işlemleri mümkün
  • ❌ Share ve daha güçlü lock’lar engellenir

🧠 Yorum:

En yaygın lock türü — normal çalışma durumu

🔹 4 — Share (S)

👉 Okuma kilidi

  • Oluşur:
    • LOCK TABLE ... IN SHARE MODE

👉 Özellik:

  • ✔️ Okuma serbest
  • ❌ DML işlemleri bloklanır

🧠 Yorum:

“Bu veri değişmesin, sadece okunsun”

🔹 5 — S/Row-X (SSX – Share Row Exclusive)

👉 Karma lock (Share + Exclusive)

  • Hem:
    • paylaşım (share)
    • hem değişiklik niyeti (exclusive)

👉 Özellik:

  • ✔️ Okuma genelde mümkün
  • ❌ DML büyük ölçüde kısıtlanır
  • ❌ Diğer güçlü lock’lar bloklanır

🧠 Yorum:

Karmaşık ve genelde problemli lock türü

🔹 6 — Exclusive (X)

👉 Tam kilit

  • Oluşur:
    • ALTER TABLE
    • DROP TABLE
    • TRUNCATE

👉 Özellik:

  • ❌ Okuma yok (çoğu durumda bekler)
  • ❌ Yazma yok
  • ❌ Tam bloklama

🧠 Yorum:

En ağır lock — sistemde beklemelerin ana sebebi

⚙️ Genel Özet Tablosu

DeğerLock AdıOkumaYazmaAçıklama
0None✔️✔️Lock yok
1Null✔️✔️Placeholder
2Row-S (SS)✔️✔️Hafif lock
3Row-X (SX)✔️✔️DML lock
4Share (S)✔️Okuma kilidi
5SSX✔️❌ (çoğu)Karma lock
6Exclusive (X)Tam kilit

⚙️ Diğer

  • STATUS → Session aktif mi
  • LOGON_TIME → Ne zamandır bağlı

🚀 Ne Zaman Kullanılır?

  • “Tablo neden kilitli?” sorusunda
  • Uygulama takıldığında
  • Deadlock / blocking analizinde
  • Performans troubleshooting sırasında

💡 Not

Bu sorgu:

  • Tablo seviyesinde lock bilgisini gösterir (TM lock)
  • Satır bazlı kilitleri (TX lock) direkt göstermez

%s için bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hey!

Merhaba! Ben EMRE, teknoloji, yazılım veri tabanı ve veri analitiği alanlarına tutkuluyum. Bu blogda, öğrendiklerimi ve tecrübelerimi paylaşarak faydalı içerikler sunmayı hedefliyorum. Boş zamanlarımda yeni teknolojiler keşfetmeyi, yazmayı ve kendimi geliştirmeyi seviyorum.

ıletısım adreslerım