ORA-04021: timeout occurred while waiting to lock object(等待锁定对象时超时)
Oracle含义
在等待获取对象(包、过程、类型等)上的 library cache lock/pin 时发生超时。通常在试图编译或修改正被另一会话执行或锁定的 PL/SQL 对象时出现。
原因
要修改/编译的对象正在另一个会话中执行,或被另一个 DDL 锁定,因此无法获取排他的 library cache 锁。长时间运行的过程调用或挂起的会话可能正持有该锁。
解决方法
找出锁定该对象的会话:SELECT * FROM dba_kgllock WHERE kgllkhdl IN (SELECT p1raw FROM v$session WHERE event LIKE 'library cache%'); 或用 v$access 和 v$session 找出正在使用该对象的会话。在负载较低的维护窗口内重试 DDL/编译。必要时安全地终止该会话。短暂停止应用可以更容易地获取锁。
同一数据库的其他条目
- ORA-29913error in executing ODCIEXTTABLEOPEN callout(执行 ODCIEXTTABLEOPEN callout 时出错)
- ORA-19804cannot reclaim N bytes disk space from M bytes limit(无法从 M 字节的限制中回收 N 字节磁盘空间)
- ORA-00494enqueue held for too long by 'inst N, osid M'(enqueue 被 '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(超出最大进程数 N)