ORA-00020 进程超限时,先杀 idle 进程腾出 slot 登录 sysdba,再调大 processes、sessions 和 DML_LOCKS(11g 及以前)参数并同步放宽系统 limits.conf 与 sysctl.conf 限制,最后重启验证三者对齐。
ORA-00020:进程数超限,连 sysdba 都登不上怎么办?
直接卡在登录环节,报 ora-00020: maximum number of processes (150) exceeded,说明数据库实例已满负荷,连管理员连接都拒绝。此时不能靠常规 sql 修改参数——得先腾出一个 slot。
- 用
ps aux | grep oracle查看当前 Oracle 进程,挑两个状态为idle或长时间无活动的oracle用户进程(比如ora_pmon_*以外的后台进程),用kill -9 <pid>杀掉(仅临时应急,非长期方案) - 杀完后立刻用
sqlplus / as sysdba登录,执行show parameter processes确认当前值 - 立即运行
alter system set processes=1000 scope=spfile;(注意:必须用scope=spfile,否则重启失效) -
shutdown immediate→startup,再查processes是否更新
Ubuntu 系统级限制没调,Oracle 实例再大也白搭
Oracle 实例的 processes 参数只是数据库层上限;Linux 内核和用户级限制不放开,Oracle 启动时根本拉不起那么多进程,甚至启动失败或静默降级。
- 检查
/etc/security/limits.conf中 oracle 用户的硬限制:oracle hard nproc至少要 ≥ 实例processes值,建议设为16384;oracle hard nofile至少 ≥processes × 2,建议65536 - 确认
/etc/sysctl.conf中kernel.pid_max(默认常为 32768)是否够用,若processes设到 8000 以上,需调高至65536并执行sudo sysctl -p - 修改后必须让 oracle 用户**完全重新登录**(不是
su - oracle切换即可,要退出再 login),否则ulimit -u和ulimit -n不会刷新
processes 和 sessions 参数不是孤立设置的
processes 是底层 OS 进程数上限,sessions 是数据库会话逻辑上限,二者强关联但不相等。Oracle 默认按 sessions = 1.1 × processes + 5 计算,所以只改 processes 可能导致 sessions 不足而报 ORA-00018: maximum number of sessions exceeded。
- 务必同步调整:
alter system set sessions=1100 scope=spfile;(若processes=1000) - 避免用
scope=memory临时改,该方式重启即丢,且无法突破processes的硬约束 - 修改后查
v$resource_limit视图确认processes和sessions的max_utilization是否接近当前值,持续高位说明仍需扩容
别忽略 DML_LOCKS 和其他隐性资源锁
有时调大 processes 后仍频繁报错,尤其是批量导入或高并发更新场景,问题可能不在进程数本身,而在配套资源锁耗尽,比如 DML_LOCKS。
-
DML_LOCKS默认值是2000,但每个 UPDATE/DELETE 语句可能占用多个锁(表锁 + 行锁),高并发下极易触顶,报ORA-00055 - 查当前使用量:
select * from v$resource_limit where resource_name in ('dml_locks', 'enqueue_resources'); - 如接近 limit,需同步调大:
alter system set dml_locks=4000 scope=spfile;,同样需重启生效 - 注意:该参数在 Oracle 12c 及以后版本已废弃(由内部自动管理),但若使用较老版本(如 11g),必须手动设
真正卡住的往往不是单个参数,而是系统级限制、实例参数、锁资源三者之间的错配。改完 processes 却没调 limits.conf,或忘了 sessions 和 dml_locks 的联动,都会让调整无效。每次改完,一定要验证 ulimit -u(用户进程上限)、ps -eLf | grep oracle | wc -l(实际进程数)、以及 v$process 中的 count,三者对齐才算真正生效。


















