ORA-04021: timeout occurred while waiting to lock object
OracleNe demek?
Bir nesne (paket, prosedür, tip vb.) üzerinde library cache lock'u/pini almak için beklenirken zaman aşımına uğradı. Genellikle bir PL/SQL nesnesini derlemeye ya da değiştirmeye çalışırken, o nesne başka bir oturum tarafından çalıştırılıyor veya kilitleniyor olduğunda ortaya çıkar.
Neden olur?
Değiştirilmek/derlenmek istenen nesne başka bir oturumda etkin olarak yürütülüyor ya da başka bir DDL tarafından kilitlenmiş durumda; bu yüzden özel (exclusive) library cache lock'u alınamıyor. Uzun süren bir prosedür çağrısı veya asılı kalmış bir oturum lock'u elde tutuyor olabilir.
Nasıl çözülür?
Nesneyi kilitleyen oturumu bulun: SELECT * FROM dba_kgllock WHERE kgllkhdl IN (SELECT p1raw FROM v$session WHERE event LIKE 'library cache%'); ya da v$access ve v$session ile nesneyi kullanan oturumu tespit edin. İş yükünün düşük olduğu bir bakım penceresinde DDL/derlemeyi tekrarlayın. Gerekirse ilgili oturumu güvenle sonlandırın. Uygulamayı kısa süreliğine durdurmak lock'u almayı kolaylaştırır.
Aynı motorda diğer kayıtlar
- ORA-29913error in executing ODCIEXTTABLEOPEN callout
- ORA-19804cannot reclaim N bytes disk space from M bytes limit
- ORA-00494enqueue held for too long by 'inst N, osid M'
- ORA-04061existing state of package/procedure has been invalidated
- ORA-01466unable to read data - table definition has changed
- ORA-08176consistent read failure; rollback data not available
- ORA-00020maximum number of processes (N) exceeded