ORA-04030: out of process memory when trying to allocate N bytes(尝试分配 N 字节时进程内存不足)
Oracle含义
服务器进程无法在其 PGA(Program Global Area,即进程私有内存)中分配空间。与 SGA 中的共享内存不同,这是单个会话/进程自身内存的耗尽。
原因
超大的排序/哈希操作、过大的 PL/SQL 集合、在失控循环中不断累积的变量,或操作系统进程内存限制(ulimit -v/-d、vm.max_map_count、地址空间)耗尽了进程内存。在 32 位实例上,地址空间限制也可能触发此问题。
解决方法
通过查看错误第二行中的分配类别(例如 'pga heap'、'koh-kghu sessi')找出消耗内存的对象。检查 PGA_AGGREGATE_LIMIT / PGA_AGGREGATE_TARGET。检查操作系统限制(ulimit -a;oracle 用户的 memlock、as、stack)。优化查询/PL/SQL,并减小批量处理的批次大小。如有需要,携带跟踪文件联系 Oracle Support。
同一数据库的其他条目
- ORA-38029object statistics are locked(对象统计信息已锁定)
- ORA-00845MEMORY_TARGET not supported on this system(此系统不支持 MEMORY_TARGET)
- ORA-27102out of memory(内存不足)
- ORA-12537TNS:connection closed(TNS:连接已关闭)
- ORA-03135connection lost contact(连接失去联系)
- ORA-01033ORACLE initialization or shutdown in progress(ORACLE 正在初始化或关闭)
- ORA-00600internal error code, arguments: [...](内部错误代码,参数:[...])