dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/oracle-ora-00060-deadlock-detected-resource
Oracle
Oracle 19c - 23aiKilit & Deadlock
8 dk okuma
ORA-00060: deadlock detected while waiting for resource

Oracle Kilitlenme Tespiti: Trace Dosyaları, v$wait_chains Analizi ve İndekssiz Foreign Key Kilitleri

Ters sırada çalışan DML işlemleri veya yabancı anahtar kolonlarında indeks eksikliğinden kaynaklanan ORA-00060 kilitlenmeleri; trace dosyası okuma ve SELECT FOR UPDATE NOWAIT çözümü.

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: Oracle Database 19c / 21c / 23ai

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerOracle 19c Enterprise Edition, 23ai Free
Gerekli YetkiSELECT on v$diag_info, v$session, v$wait_chains
Risk Seviyesi
HighDeadlock durumunda Oracle transaction'lardan birini kurban seçip (victim) ORA-00060 ile abort eder
Beklenen ÇıktıTrace dosyasında deadlock graph analizi ve yabancı anahtar indeks eksikliklerinin giderilmesi
Geri Dönüş (Rollback) Planı:Uygulama seviyesinde retry mekanizması ve sıralı update deseni
Oracle Docs: Deadlocks in Oracle Database
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

Uygulama transaction çalıştırırken aniden hata alır ve işlem geri alınır:

plaintext
ORA-00060: deadlock detected while waiting for resource

▸Sahada Ne Görürsün?

İki eşzamanlı işlem aynı anda birbirinin kilitlediği satırları bekler. Oracle saniyeler içinde döngüyü tespit eder ve transaction'lardan birini kurban (victim) seçerek abort eder. Alert log'da bir .trc dosyası referansı verilir.


▸Kök Neden Matrisi

OlasılıkKök NedenAçıklama
%55Ters Sırada Güncelleme (Cross-Update)İşlem A önce Tablo X'i sonra Tablo Y'yi günceller; İşlem B ise tam tersi sırada günceller.
%35İndekssiz Yabancı Anahtar (Unindexed Foreign Key)Çocuk tabloda foreign key kolonu indekslenmemiştir. Ebeveyn tabloda bir satır silindiğinde/güncellendiğinde Oracle çocuk tablonun tamamına tablo seviyesinde kilit koyar!
%10Bitmap İndekslerde Eşzamanlı DMLOLTP tablolarında Bitmap indeks kullanılması blok seviyesinde kilitlenmelere yol açar.

▸ACİL RUNBOOK (0-5dk)

sql
-- 1. Trace dosyasının konumunu öğren SELECT value FROM v$diag_info WHERE name = 'Default Trace File'; -- 2. Aktif bloke eden oturumları gör SELECT blocking_session, sid, serial#, username, wait_class, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL; -- 3. İndekssiz foreign key'leri tespit et (klasik ORA-00060 sebebi) SELECT c.table_name, c.constraint_name, cc.column_name FROM user_constraints c JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name WHERE c.constraint_type = 'R' AND NOT EXISTS ( SELECT 1 FROM user_ind_columns ic WHERE ic.table_name = c.table_name AND ic.column_name = cc.column_name );

▸KALICI BLUEPRINT

  1. 1Foreign Key İndeksleme: Tüm yabancı anahtar (FK) kolonlarına istisnasız B-Tree indeks konmalıdır.
  2. 2Sıralı Güncelleme Standardı: Çoklu satır güncellemelerinde satırlar her zaman ORDER BY id ile sıralanarak kilitlenmelidir.
  3. 3`NOWAIT` veya `SKIP LOCKED`: SELECT ... FOR UPDATE NOWAIT ile kilit alınamıyorsa anında dönülmeli, sonsuz bekleme engellenmelidir.

▸Doğrulama

sql
SELECT * FROM v$wait_chains WHERE blocking_session IS NOT NULL;

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (82)