dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/oracle/#42
Runbook #42
oracle
LockingSEV2 · DEGRADATION15-30 dakika / 15-30 minsSYSDBA / DBA / SELECT_CATALOG_ROLE

Oracle Blocking Sessions: Find and Resolve the Root Lock Holder

Correlates waiting and blocking sessions, locked objects and RAC instances to release contention without needless application disruption.

Related Metrics:M43
Related Scripts:S62S79
#blocking#enq-tx#gv$session#rac#row-lock

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

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

1. Symptom & Signals

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

2. Business & Technical Impact

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

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. 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;
🟢 Read-Only2. 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.
🟢 Read-Only3. 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. Remediation & Action Plan

🟡 Reversible1. 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.
🔴 HIGH RISK / IRREVERSIBLE2. İş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.

🟡 Reversible3. Ö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.
🔴 HIGH RISK / IRREVERSIBLE4. `ALTER SYSTEM DISCONNECT SESSION` ya da OS süreç öldürme komutlarını rastgele uygulamayın; PMON temizliği ve rollback sürebilir.

5. Verification & Health Checks

- 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. Rollback & Contingency Plan

- `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.

More ORACLE Runbooks