dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #42
oracle
LockingSEV2 · CİDDİ BOZULMA15-30 dakika / 15-30 minsSYSDBA / DBA / SELECT_CATALOG_ROLE

Oracle Bloklayan Oturumlar: Kök Kilidi Bulma ve Çözme

Bekleyen ve bloklayan oturumları, kilitli nesneyi ve RAC instance'ını eşleştirir; uygulama işlemlerini gereksiz kesmeden kilidi çözer.

İlişkili Metrik:M43
İlişkili Script:S62S79
#blocking#enq-tx#gv$session#rac#row-lock

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Belirti / Symptom

- M43 bloklanan oturum sayısı artıyor, `enq: TX - row lock contention` gibi beklemeler, uygulama zaman aşımı.

2. Etki / Impact

Etkilenen nesnelerde işlemler bekler, bağlantı havuzu dolar, işlem hacmi düşer. Uzun rollback ilave gecikme yaratabilir.

3. Teşhis / Diagnosis

🟢 Salt Okunur1. S62'nin tek-instance görünümüne ek olarak RAC'te hem instance hem SID eşleştirin:
sql
SELECT w.inst_id AS wait_inst, w.sid AS wait_sid, w.seconds_in_wait,
       w.event, w.sql_id AS wait_sql_id,
       b.inst_id AS block_inst, b.sid AS block_sid, b.serial# AS block_serial,
       b.username AS block_user, b.status AS block_status, b.sql_id AS block_sql_id,
       b.prev_sql_id AS block_prev_sql_id
FROM gv$session w
JOIN gv$session b ON b.inst_id=w.blocking_instance AND b.sid=w.blocking_session
WHERE w.blocking_session IS NOT NULL
ORDER BY w.seconds_in_wait DESC;
🟢 Salt Okunur2. S79 ile `v$locked_object`/`dba_objects` nesnesini bulun. `blocking_session` sütunu her bloklama durumunda dolu olmayabilir; `gv$lock` ve uygulama loglarıyla destekleyin.
🟢 Salt Okunur3. Bloklayıcı `INACTIVE` mi ve açık transaction'ı var mı? Nesnenin DML/DDL yükünü ve fatura/ETL gibi kritik işleri kontrol edin. Zincirde baş bloklayıcıyı ayırın; bekleyeni öldürmek kök nedeni çözmez.

4. Müdahale / Response

🟡 Geri Alınabilir1. Mümkünse uygulama ekibine **COMMIT/ROLLBACK** yaptırın. Uzun süren işi bakım saatine alın veya transaction'ı küçültün.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ2. İşin sahibinden onay aldıktan sonra son çare olarak bloklayıcı oturumu sonlandırın:
sql
-- Tek instance:
ALTER SYSTEM KILL SESSION '123,456' IMMEDIATE;
-- RAC'te ilgili instance:
ALTER SYSTEM KILL SESSION '123,456,@2' IMMEDIATE;

SID/SERIAL#/instance'ı adım 1'deki güncel sonuçtan alın. Açık transaction geri alınırken kilitler hemen çözülmeyebilir.

🟡 Geri Alınabilir3. Önleme: DML transaction'larını kısaltın, sıralamayı tutarlı hale getirin, FK indekslerini ve uzun SELECT FOR UPDATE işlemlerini gözden geçirin.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ4. `ALTER SYSTEM DISCONNECT SESSION` ya da OS süreç öldürme komutlarını rastgele uygulamayın; PMON temizliği ve rollback sürebilir.

5. Doğrulama / Verification

- S62 sorgusunda bloklanan zincir boşaldı, M43 normale döndü; uygulama süreleri ve hata oranı iyileşti.

- Sonlandırılan işlem için yeniden deneme/rollback etkisi uygulama sahibince doğrulandı.

6. Geri Alma / Rollback

- `KILL SESSION` geri alınamaz; açık işlem rollback olur, uygulama yeniden çalıştırmalıdır. Önleyici uygulama/indeks değişikliklerini ayrı geri dönüş planıyla yönetin.

Diğer ORACLE Runbook'ları