oracle 无法分配32字节,ORA-04031:无法分配 32 字节的共享内存

案例 ORA-04031:无法分配 32 字节的共享内存

今天發現數據庫異常宕機情況

出現錯誤ORA-04031: 无法分配 ORA-04031: 无法分配 32 字节的共享内存

數據庫版本 目前版本10.2.0.4 但是compatible還是10.2.0.3.0

按道理講此bug,在10.2.0.4已解決

select * from (select name

,value

,decode(isdefault, 'TRUE','Y','N') as "Default"

,decode(ISEM,'TRUE','Y','N') as SesMod

,decode(ISYM,'IMMEDIATE', 'I',

'DEFERRED', 'D',

'FALSE', 'N') as SysMod

,decode(IMOD,'MODIFIED','U',

'SYS_MODIFIED','S','N') as Modified

,decode(IADJ,'TRUE','Y','N') as Adjusted

,description

from ( --GV$SYSTEM_PARAMETER

select x.inst_id as instance

,x.indx+1

,ksppinm as name

,ksppity

,ksppstvl as value

,ksppstdf as isdefault

,decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') as ISEM

,decode(bitand(ksppiflg/65536,3),

1,'IMMEDIATE',2,'DEFERRED','FALSE') as ISYM

,decode(bitand(ksppstvf,7),1,'MODIFIED','FALSE') as IMOD

,decode(bitand(ksppstvf,2),2,'TRUE','FALSE') as IADJ

,ksppdesc as description

from x$ksppi x

,x$ksppsv y

where x.indx = y.indx

and substr(ksppinm,1,1) = '_'

and x.inst_id = USERENV('Instance')

)

order by name

)

以上sql,能解釋隱含參數

分析 1.可能sharepool 真的不夠

先查詢下pool

select pool,sum(bytes/1024/1204),sum(bytes)/(select sum(bytes) from v$sgastat)*100 as "Percent"

from v$sgastat  where pool is not null  group by pool;

查詢buffer大小

select name,sum(bytes/1024/1204),sum(bytes)/(select sum(bytes) from v$sgastat)*100 as "Percent"

from v$sgastat where pool is  null group by name;

10G SGA自動管理信息

select component,CURRENT_SIZE/1024/1204,user_specified_size,granule_size from v$sga_dynamic_components;

11G MEMORY自動管理信息

SELECT * FROM   V$MEMORY_DYNAMIC_COMPONENTS

SELECT * FROM V$MEMORY_RESIZE_OPS

SELECT * FROM V$MEMORY_TARGET_ADVICE

結論:sharepool沒有不夠的問題!

分析 2.compatible參數還是10.2.0.3.0,導致BUG

解決辦法

2.1 create pfile='/u01/pfile.ora' from spfile;

并將compatible 修改為‘10.2.0.4.0’

2.2 shutdown 資料庫

2.3 startup nomount pfile='/u01/pfile.ora'

2.4 create spfile from pfile='/u01/pfile.ora'

2.5 shutdown immediate;

2.6 startup;

修改完成,待觀察。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORA-04031错误是指在Oracle数据库中无法分配足够的共享内存。具体来说,这个错误通常是由于共享池(shared pool)内存资源不足造成的。共享池是Oracle数据库中的一个重要组件,用于存储已经执行过的SQL语句和相关的数据结构,以提高查询的性能。 根据你提供的引用内容,ORA-04031错误可能是由于共享池空间耗尽所导致的。共享池内存中存储了大量的SQL语句和其他对象,当内存空间不足时,就会出现无法分配共享内存的错误。 为了解决ORA-04031错误,你可以尝试以下几种方法: 1. 增加共享池的大小:通过修改数据库参数,增加共享池的大小,从而提供更多的内存空间给共享池使用。你可以使用ALTER SYSTEM语句来修改shared_pool_size参数的值。 2. 优化SQL语句:检查并优化数据库中的SQL语句,尽量减少共享池中存储的SQL语句数量和大小。可以使用SQL调优工具,如SQL Tuning Advisor或SQL Access Advisor,来帮助你找出性能较差的SQL语句并进行优化。 3. 增加物理内存:如果共享池的内存空间无法满足需求,你可以考虑增加数据库服务器的物理内存。增加物理内存可以提供更多的内存资源给共享池使用,从而减少ORA-04031错误的发生。 请注意,解决ORA-04031错误可能需要根据具体情况进行调整和优化,建议在操作前备份数据库并咨询专业的数据库管理员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值