ORA-00494: enqueue held for too long by 'inst N, osid M'(enqueue 被 'inst N, osid M' 持有时间过长)
Oracle含义
某个关键资源 enqueue(例如 CF —— 控制文件 enqueue)被某进程持有的时间远超允许值,Oracle 为防止系统挂起而终止了该进程。在 alert.log 中与 'killing enqueue blocker' 条目一同出现。
原因
由于 I/O 瓶颈、严重的 CPU 压力或操作系统停顿(swapping、磁盘缓慢),某个后台或用户进程持有重要 enqueue 的时间超过了允许值;对于控制文件(CF)enqueue,此时间由 _controlfile_enqueue_timeout 设定(默认 900 s)。隐含(下划线)参数只应在 Oracle Support 指导下修改。通常由存储延迟或 LGWR/CKPT 等进程缓慢触发。
解决方法
查看 alert.log 和被终止进程的跟踪文件,确定涉及哪个 enqueue(通常是控制文件)以及哪个后台进程。真正的原因通常是存储/I/O 延迟:检查磁盘响应时间、多路径和控制器健康状况。降低 CPU/内存压力和 swap 使用。如果反复出现,将跟踪分析结果提供给 Oracle Support。
同一数据库的其他条目
- ORA-01102cannot mount database in EXCLUSIVE mode(无法以 EXCLUSIVE 模式装载数据库)
- ORA-29913error in executing ODCIEXTTABLEOPEN callout(执行 ODCIEXTTABLEOPEN callout 时出错)
- ORA-19804cannot reclaim N bytes disk space from M bytes limit(无法从 M 字节的限制中回收 N 字节磁盘空间)
- ORA-04021timeout occurred while waiting to lock object(等待锁定对象时超时)
- 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(一致性读失败;回滚数据不可用)