当前位置: 代码迷 >> Oracle管理 >> ORA-04030: 在尝试分配 字节 (,) 时历程内存不足
  详细解决方案

ORA-04030: 在尝试分配 字节 (,) 时历程内存不足

热度:494   发布时间:2016-04-24 05:09:47.0
ORA-04030: 在尝试分配 字节 (,) 时进程内存不足
出现如下错误:
*** 2012-08-06 06:20:06.245
*** SERVICE NAME:(SYS$BACKGROUND) 2012-08-06 06:20:06.245
*** SESSION ID:(269.1) 2012-08-06 06:20:06.245
error 4030 detected in background process
ORA-04030: 在尝试分配 字节 (,) 时进程内存不足

使用:
SQL>alter system flush shared_pool;
系统已更改。

不起作用。

OS:Windows Server Enterprise 2008 Service Pack 2
处理器:Intel(R)Xeon(R)CPU E7-4807 @1.87GHz(2处理器)
内存(RAM): 32.0 GB
系统类型:32位操作系统

数据库为oracle 10.2.0

是否能给出大概解决方法,目前数据库是生产库。


*****************************************分割线**************************************
SQL>show sga;
Total System Global Area 616562688 bytes
Fixed Size 1332372 bytes
Variable Size 213576556 bytes
Database Buffers 398458880 bytes
Redo Buffers 3194880 bytes 

SQL>show parameter process;
NAME TYPE VALUE  
---------------------- -------- -----
aq_tm_processes integer 0
db_writer_processes integer 3
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 500


SQL>show parameter sga;
NAME TYPE VALUE
------------------------------- ------- ------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 588M
sga_target big integer 584M


SQL>show parameter pga;
NAME TYPE VALUE
------------------------------- ------ ------
pga_aggregate_target big integer 194M




------解决方案--------------------
ORA-04030出现的基本都是过多的使用memory造成的

Oracle process使用的内存数量是有一定限制的:

A. 对于32 BIT系统,有SGA 1.7G限制


B. 某些OS系统本身也有一些内存参数限制

--运行 ulimit 看看

C. OS系统本身物理内存+Swap的限制


我们应该检查DB使用的
SGA + PGA 是否超过 上面的限制

SGA 包括 db_cache,shared_pool,large_pool,java_pool
session的PGA包括
sort_area_size/Hash_area_size/*_area_size 或者 pga_aggregate_target
还有执行的CODE以及一些data也会占用空间。

然后再根据情况降低里面的某些值了,比如 db_cache, sort_area_size 等

如果是OS系统的某Limited造成的,可以考虑放开限制


------解决方案--------------------
做下AWR 看看什么SQL占用了大量内存

杀掉占用内存大的session,最好是确定问题原因再进行操作。

没有办法的话,重新启动是一种方法,生产库谨慎操作!!
------解决方案--------------------
我去,32G内存为啥装32位系统上啊,打补丁了没,要不,有内存使用限制啊。
还有,这么大的内存,仅分配给oracle 600M的sga,还有500个进程,不死才怪。
先加大oracle sga的内存,然后找时间,换成64位的操作系统。