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

Leave a Reply to %s

Your email address will not be published. Required fields are marked with *

Hey!

Hello! I'm EMRE, and I'm passionate about technology, software, databases, and data analytics. In this blog, I aim to provide helpful content by sharing my learnings and experiences. In my spare time, I enjoy exploring new technologies, writing, and self-improvement.

My contact addresses