Ora-04031 问题诊断思路

2014-11-24 18:13:04 · 作者: · 浏览: 0


--3.分析各共享池的使用情况
SQL> select KSPPINM,KSPPSTVL from x$ksppi,x$ksppcv
where x$ksppi.indx = x$ksppcv.indx and KSPPINM = '_shared_pool_reserved_min_alloc';
KSPPINM KSPPSTVL
------------------------------- --------
_shared_pool_reserved_min_alloc 4400 --(门值)
-- 我们看到INDX=5,DBMS_LOB造成换页(就是做exp涉及到lob对象处理造成的换页情况),换出最近未使用的内存,但是换出内存并合并碎片后在共享区仍然没有合适区来存放数据,说明共享区小和碎片过多,然后根据_shared_pool_reserved_min_alloc的门值来申请保留区,而门值为4400,所以不符合申请保留区的条件,造成4031错误。我们前面看到保留区全部为空闲状态,所以我们可以减低门值,使更多申请共享内存比4400小的的对象能申请到保留区,而不造成4031错误。



--4.解决办法:
--1).增大shared_pool (在不DOWN机的情况下不合适)
--2).打patch (在不DOWN机的情况下不合适)

--3).减小门值 (在不DOWN机的情况下不合适)
-- 因为LAST_FAILURE_SIZE<_shared_pool_reserved_min_alloc所以表明没有有效的使用保留区
SQL> alter system set "_shared_pool_reserved_min_alloc" = 4000;
alter system set "_shared_pool_reserved_min_alloc"=4000
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
-- 9i的使用方法alter system set shared_pool_reserved_min_alloc"=4000 scope=spfile;
--4).使用alter system flush shared_pool; (不能根本性的解决问题)
-- 5).使用dbms_shared_pool.keep