最近我们公司的数据库服务器的oracle每隔10天左右就当掉一次,初步估计应该是内存参数设置错误,以下是基本资料,期待各位大侠的高见..错误日志:alert.logErrors in file d:\oracle\admin\landdb\udump\landdb_ora_7288.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:14:39 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_6716.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:20:20 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_4760.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:24:18 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_7304.trc:
ORA-04030: 在尝试分配 576248 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:26:47 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_8156.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:28:16 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_7756.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足Tue May 08 08:28:18 2007
Errors in file d:\oracle\admin\landdb\udump\landdb_ora_5236.trc:
ORA-04030: 在尝试分配 917536 字节 (joxcx callheap,ioc_allocate ufree) 时进程内存不足
init.ora文件内容:##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################
 
###########################################
# MTS
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=landdbXDB)"
 
###########################################
# Optimizer
###########################################
hash_join_enabled=TRUE
query_rewrite_enabled=FALSE
star_transformation_enabled=FALSE
 
###########################################
# Job Queues
###########################################
job_queue_processes=10
 
###########################################
# Instance Identification
###########################################
instance_name=landdb
 
###########################################
# Miscellaneous
###########################################
aq_tm_processes=1
compatible=9.2.0.0.0
 
###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=EXCLUSIVE
 
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=25165824
sort_area_size=524288
 
###########################################
# Database Identification
###########################################
db_domain=""
db_name=landdb
 
###########################################
# File Configuration
###########################################
control_files=("r:\oracle\oradata\landdb\CONTROL01.CTL", "r:\oracle\oradata\landdb\CONTROL02.CTL", "r:\oracle\oradata\landdb\CONTROL03.CTL")
 
###########################################
# Pools
###########################################
java_pool_size=33554432
large_pool_size=8388608
shared_pool_size=50331648
 
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
 
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=10800
undo_tablespace=UNDOTBS1
 
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=d:\oracle\admin\landdb\bdump
core_dump_dest=d:\oracle\admin\landdb\cdump
timed_statistics=TRUE
user_dump_dest=d:\oracle\admin\landdb\udump
 
###########################################
# Processes and Sessions
###########################################
processes=150
 
###########################################
# Redo Log and Recovery
###########################################
fast_start_mttr_target=300
 
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_cache_size=25165824
db_file_multiblock_read_count=16
服务器参数:windows2003server(32bit)+oracle9i
            8G内存,CPU4个

解决方案 »

  1.   

    会不会是因为db_cache_size太小,或者是sga太小所造成的,我看了很多帖子,我的db_cache_size才24M,别人说可以达到1G,还有SGA,我们的最大值都只有130多M,比较迷惑
      

  2.   

    http://www.hellodba.com/Doc/oracle_memory(11).htm
      

  3.   

    看看到底是什么在拼命消耗内存:
    SELECT server,name,value/1024/1024,s.sid,s.serial#
    FROM v$session s, v$sesstat st,v$statname sn
    WHERE  st.sid = s.sid
    AND st.statistic# = sn.statistic#
    AND sn.name LIKE 'session pga memory'
    AND value > 10 * 1024 * 1024             --only show pga > 10M
    ORDER BY  value DESC  
    如果基本上都是默认配置的话,不太可能是配置上的原因,很可能是应用的问题
    检查出现问题的时间之前附近,应用在跑什么
      

  4.   

    服务器参数:windows2003server(32bit)+oracle9i
                8G内存,CPU4个不愧是ORACLE甲骨文,稀奇古怪又让人难以琢磨的东西。
    无论是2003还是9i都是成熟常用的。
    8G,4CPU这么高的配置,默认参数,居然还会出分配进程内存不足问题。
    这应该吗!我们公司早期是IBM NETFINITY5500 M10   CPU P2 XEON 450M *1 , 内存256M*4, 硬盘9G*4 RAID5,MSSQL7.0 ,WINNT4.0 这么低的配置也没报过内存不足这类错误,也从没自己当掉过。
    后期28G的数据库,最大单表900万记录,数据处理很慢,但也只是等的时间长,没出过错。日结帐时需要insert那个900万记录的大表,只是将客户端SQL连接参数TIMEOUT调长,就都能处理过去。虽然还能维持使用,后来感觉用了5年的服务器已经够本了,就换了一台新服务器,IBM X255
     MP 2.0*2 ,512M*4, 用起来感觉有质的飞跃,当时爽歪了!如今有过了3年多,正准备再换新服务器,4个双核CPU,8G内存,直接爽到顶点。当然非IBM不买,8年多5台IBM服务器从未有1台出问题,除了风扇硬是转坏了1个。在此告诉大家两个秘诀:1、必须买IBM原厂原装件,打死也不要图便宜买OEM件,虽然价格只有原厂件的十分之一,但出问题的几率高1000倍,尤其是不要被中间商骗了,拿OEM件当原厂件卖你,倒是你就哭吧!同样是一条内存OEM的200元、原厂的2000元,那质量能一样吗,动下脑筋就知道了。2、每半年一定要给服务器大清扫,把整个服务器拆开,用吹风机把灰尘吹干净。灰尘是硬件杀手,在干净的机房也会有灰尘,清理灰尘是绝对必须的,提醒一下,做raid5的,硬盘抽出时,一定要记清楚顺序,否则就费了,切记切记!
      

  5.   

    呵呵,,,有点汗,我的参数都是默认参数,但是这个默认参数中SGA最大才140M,PGA才64M,加起来才200多M,是不是意味着ORACLE就只能用这200多M,还有一个,我们的应用中有B/S来连接数据库,还有C/S来连接,是不是和这个有关系?
      

  6.   

    默认配置是DEDICATED服务器方式,数据库使用的sga + pga大概只有200多Mb内存,前提是应用正常,没有出现死循环啥的,导致session pga比较大,甚至超过sga + pga
    按楼主的设置看了一下:
    SQL>show sgaTotal System Global Area  135338868 bytes
    Fixed Size                   453492 bytes
    Variable Size             109051904 bytes
    Database Buffers           25165824 bytes
    Redo Buffers                 667648 bytes
    SGA的最大只有135338868,大概130Mb
    shared_pool_size 缓存解析完成的sql,如果不够大,一般会出现ora04031错误;
    large_pool_size 由于默认设置DEDICATED方式,不是MTS方式,所以主要用于保存并行查询信息或者rman的备份啥的,当前是8Mb,不是特别大,感觉上应该不是错误原因;
    Data buffer 缓存dbblock,如果不够大的话,导致频繁去磁盘读取数据,也不大可能产生ora040030错误啊SQL>show parameters pgaNAME                                 TYPE                   VALUE
    ------------------------------------ ---------------------- --------------------
    ----------
    pga_aggregate_target                 big integer            25165824
    PGA最大只有25165824,大概24Mb,用于排序啥的,如果内存中PGA排序空间不够的话,会使用临时表空间进行磁盘排序监控一下应用出错之前应用在进行什么操作,看看那些操作消耗了大量的内存,确定问题出现的原因,解决方案就容易出来啊
      

  7.   

    谢谢xiaoxiao1984(笨猫儿) ( )的回答,这几天,我按照你给我的语句,去监控了数据库,都没有发现异常的东西,所以我总是担心内存的问题,而且总认为这么大的内存都没有用上,怪可惜的.
      

  8.   

    那估计是windows的内存分配问题,单进程最大内存数有限制,查下看是配置问题还是需要打补丁呀
      

  9.   

    这个缺省参数如何能满足要求?
    pga_aggregate_target=25165824
    sort_area_size=524288
    shared_pool_size=50331648
    db_cache_size=25165824
    请先检查应用程序,如果应用程序没有问题,请用如下配置尝试:
    pga_aggregate_target=268435456
    sort_area_size=8388608
    shared_pool_size=314572800
    db_cache_size=1073741824
      

  10.   

    注意看一下下面几个参数的设定,如果用的是缺省值,估计是设得太小了调大点就可以了如果,按缺省值,内存再多也没用的,Oracle只会按自己设的大小使用内存,有时会影响执行效率,只是我们看不到而已,比如说db_cache_sizesort_area_size
    shared_pool_size
    pga_aggregate_target可能还有类似的参数,在 initXXX.ora 里面还有就是确认下,这个错误只是偶尔出现吧