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:
INSERTUPDATEDELETE
👉 Ö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 TABLEDROP TABLETRUNCATE
👉 Özellik:
- ❌ Okuma yok (çoğu durumda bekler)
- ❌ Yazma yok
- ❌ Tam bloklama
🧠 Yorum:
En ağır lock — sistemde beklemelerin ana sebebi
⚙️ Genel Özet Tablosu
| Değer | Lock Adı | Okuma | Yazma | Açıklama |
|---|---|---|---|---|
| 0 | None | ✔️ | ✔️ | Lock yok |
| 1 | Null | ✔️ | ✔️ | Placeholder |
| 2 | Row-S (SS) | ✔️ | ✔️ | Hafif lock |
| 3 | Row-X (SX) | ✔️ | ✔️ | DML lock |
| 4 | Share (S) | ✔️ | ❌ | Okuma kilidi |
| 5 | SSX | ✔️ | ❌ (çoğu) | Karma lock |
| 6 | Exclusive (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