ORA-00020: maximum number of processes (N) exceeded(超出最大进程数 N)
Oracle含义
实例的进程数达到了 PROCESSES 初始化参数定义的上限,无法创建新的连接/进程。新会话无法连接;甚至管理员也可能无法连接。
原因
应用连接池过大、连接从不关闭(泄漏)、并发用户多于预期,或 PROCESSES 参数设置过低,导致超出限制。有时挂起的后台作业或并行查询进程也会占用进程。
解决方法
可以用 sqlplus -prelim / as sysdba 连接,但此连接无法运行 SQL(无法查询 v$session);它只能用于 oradebug(例如 hanganalyze)和 SHUTDOWN ABORT。要释放槽位,在操作系统级别谨慎终止空闲的应用服务器进程(ps -ef | grep 'LOCAL=NO');然后用普通 SYSDBA 连接,通过 v$session/v$process 找出泄漏的会话,用 ALTER SYSTEM KILL SESSION 关闭它们。作为永久方案,增大 PROCESSES 并重启实例(如果 spfile 中显式设置了 SESSIONS,它不会被重新推导;也要一并更新)。在应用端,修正连接池最大值和空闲连接清理。
同一数据库的其他条目
- 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-01113file N needs media recovery(文件 N 需要介质恢复)
- ORA-02393exceeded call limit on CPU usage(超出单次调用的 CPU 使用限制)
- ORA-12801error signaled in parallel query server Pnnn(并行查询服务器 Pnnn 中发出错误信号)