ORA-00060: Deadlock detected while waiting for resource
OracleNe demek?
İki veya daha fazla oturum, birbirinin tuttuğu kaynağı beklerken karşılıklı kilitlenmiş (deadlock). Oracle döngüyü tespit edip kurbanı seçer ve o oturumun ifadesini geri alır.
Neden olur?
Row lock'larının farklı sıralarda alınması, aynı satırların farklı transaction'lar tarafından çapraz güncellenmesi, index'siz foreign key'ler nedeniyle üst tablo güncellemelerinde table lock oluşması veya bitmap index üzerinde eşzamanlı DML.
Nasıl çözülür?
Alert log'da oluşan deadlock trace (graph) dosyasını inceleyerek çakışan SQL'leri ve satırları bulun. Uygulamada tablolara/satırlara her zaman aynı sırada erişin. Foreign key sütunlarına index ekleyin (index'siz FK klasik deadlock nedenidir). Transaction'ları kısa tutun ve commit sıklığını gözden geçirin. Deadlock'a düşen transaction'ı uygulamada yakalayıp yeniden deneyin.
Aynı motorda diğer kayıtlar
- ORA-00001Unique constraint violated
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired
- ORA-01017Invalid username/password; logon denied
- ORA-01555Snapshot too old: rollback segment number too small
- ORA-01652Unable to extend temp segment by N in tablespace
- ORA-04031Unable to allocate N bytes of shared memory