Oracle hataları

ORA-00054: resource busy and acquire with NOWAIT specified

Kaynak meşgul — kilit başka bir oturumda

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

İhtiyaç duyduğunuz nesne ya da satırlar üzerinde başka bir oturum kilit tutuyor ve ifadenizin beklemesine izin verilmedi. Kilitleyen oturumu bulun, commit ya da rollback yapmasını sağlayın, sonra ifadenizi yeniden çalıştırın.

Ne anlama gelir?

Bazı ifadeler özel (exclusive) kilit ister ve bunun için sıraya girmez. ALTER TABLE, DROP ya da TRUNCATE gibi DDL’ler tabloya tek başına erişmek ister; SELECT … FOR UPDATE NOWAIT ise hiç beklememeyi seçer. Başka bir oturum çakışan bir kilit tutuyorsa — çoğunlukla commit edilmemiş değişiklikler — Oracle beklemek yerine ORA-00054 döndürür.

Yaygın nedenler

Nasıl çözülür?

  1. Kilidi kimin tuttuğunu bulun: V$LOCKED_OBJECT ile V$SESSION’ı birleştirin ya da bir oturum izleme ekranı kullanın.
  2. O oturumun sahibinden commit ya da rollback yapmasını isteyin; oturumu yalnızca güvenli olduğundan eminseniz sonlandırın.
  3. DDL için oturumunuzun kilidi birkaç saniye beklemesine izin verin: ALTER SESSION SET ddl_lock_timeout = 30 (Oracle 11g ve sonrası).
  4. Yoğun tablolardaki yapısal değişiklikleri sakin bir zaman dilimine planlayın.

Örnek

Tabloyu kim kilitliyor?

SELECT s.sid, s.serial#, s.username, s.program, o.object_name
  FROM v$locked_object l
  JOIN dba_objects o ON o.object_id = l.object_id
  JOIN v$session s   ON s.sid = l.session_id
 WHERE o.object_name = 'ORDERS';

DDL hemen düşmesin, 30 saniyeye kadar beklesin:

ALTER SESSION SET ddl_lock_timeout = 30;
ALTER TABLE orders ADD (note VARCHAR2(200));

SQLlightspeed’de

Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.

İlgili hatalar

ORA-00060ORA-01555ORA-00001 Tüm Oracle hataları →

Oracle dokümantasyonu: ORA-00054. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.