Oracle报错-ora-04030

  • ORA-04030: out of process memory when trying to allocate 88 bytes
    ORA-04030:尝试分配88字节时进程内存不足(以下信息为转载整理,仅供参考)

根据异常信息,可以很容易的判断是由于内存使用过多,分配不足所致的。此时需要考虑是本身内存不足还是其他原因。
若本身内存很大,出现内存不足的可能性很低。需要考虑oracle在分配内存的时候是有限制的,超出此限制则产生此错误。
max_sga_size指的是可动态分配的最大值﹐而sga_target是当前已分配的最大sga。
max_sga_size是不可以动态修改的﹐而sga_target是可动态修改﹐直到max_sga_size的值(前提是你设定的max_sga_size>sga_target的情況)
如果在实例启动时﹐max_sga_size < sga_target或max_sga_size没设定﹐则启动后max_sga_size的值会等于sga_target的
https://blog.csdn.net/lixiaoer757/article/details/80594266 转载

故障原因是由于数据库监听是通过 crs 进行启动,所以继承了 root 用户的 ulimit 限制,在 root 的 ulimit 限制中 data(kbytes) 的限制为 131072kb,即每个通过监听连接的进程能分配的内存资源不能超过 131072kb,所以在通过 PLSQL Developer 工具连接数据库(需要通过 Oracle 的监听建立连接)创建索引时,该操作申请的内存资源达到该限定时就会报 ORA-04030 的错误
1)是否有足够的可用内存
2)是否设置了oracle限制
PGA 设置的大小为 8400M,根据单个会话使用 PGA 的期望尺寸(也可以认为是实际分配的最大尺寸)计算公式是:min(5%pga_aggregate_target,50%_pga_max_size,_smm_max_size),可以简单计算下 min(5%*8400M,50%1680M,840M)=420M(其中_pga_max_size 的单位为 bytes,_smm_max_size 的单位为 kb),即单个会话能使用 PGA 的期望尺寸为 420M,那报错的会话是否超过了该限制。
检测办法:查看trace文件
3)哪个进程需要的内存过多
检测办法:查看trace文件
4)是否设置了操作系统的限制
查看操作系统限制,oracle用户限制
产生原因:(PLSQL Developer 是通过监听程序建立的进程连接;sqlplus 是在数据库服务器上直接创建创建的连接,绕过了监听程序建立的进程)

避免方法:
1)在安装 Oracle 软件创建数据库之前应该对主机层面的内核参数、limit 限制等进行规范的修改,以避免类似问题的发生。
2)配置合理的内存,例如物理内存和交换空间
3)使用自动 PGA 内存管理可降低 ORA-04030 错误的概率

https://blog.csdn.net/lzw5210/article/details/73550266 转载

今天使用LogMiner找回误更新的数据时,查询v$logmnr_contents时,遇到了“ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)”错误。查了一下My Oracle Support,发现出现ORA-04030错误的原因,特摘录在此。
如果指定了COMMITTED_DATA_ONLY选项而且发出了查询,则LogMiner会在内存中的单个事务中逐步处理所有的重做记录, 直到 logminer 找到该事务的提交记录。 因此,可能会耗尽内存,在这种情况下将出现“Out of Memory”错误
ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)

APPLIES TO:
Oracle Database - Enterprise Edition - Version 10.2.0.4 to 12.1.0.1 [Release 10.2 to 12.1]
Information in this document applies to any platform.
This problem can occur on any platform.

SYMPTOMS
Select against logminer fails with ORA-4030 (Logminer LCR c,krvtadc).

Following query failed:
SELECT username, TO_CHAR(timestamp,'HH24:MI:SS'), substr(sql_redo,1,110)
FROM v$logmnr_contents
WHERE seg_owner=''
AND seg_name IN ('

');

FROM v$logmnr_contents where
ERROR at line 2:
ORA-4030: out of process memory when trying to allocate 56 bytes (Logminer LCR c,krvtadc)
CAUSE
According to the documentation in Oracle® Database Utilities:
If the COMMITTED_DATA_ONLY option is specified and you issue a query, LogMiner stages all redo records within a single transaction in memory until LogMiner finds the commit record for that transaction. Therefore, it is possible to exhaust memory, in which case an "Out of Memory" error will be returned.
EXECUTE DBMS_LOGMNR.ADD_LOGFILE (logfilename => '',
options => DBMS_LOGMNR.NEW);
EXECUTE sys.DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => '',
options =>dbms_logmnr.committed_data_only);
SOLUTION
If this occurs, you must restart LogMiner without the COMMITTED_DATA_ONLY option specified and reissue the query.
REFERENCES
https://www.cnblogs.com/kerrycode/p/10206255.html 转载



来自为知笔记(Wiz)

上一篇:HugePages 大内存页


下一篇:MTK 添加与APK通信的property