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位的操作系统。