oraclerac共享内存错误

上传人:206****923 文档编号:37523454 上传时间:2018-04-17 格式:DOCX 页数:5 大小:16.64KB
返回 下载 相关 举报
oraclerac共享内存错误_第1页
第1页 / 共5页
oraclerac共享内存错误_第2页
第2页 / 共5页
oraclerac共享内存错误_第3页
第3页 / 共5页
oraclerac共享内存错误_第4页
第4页 / 共5页
oraclerac共享内存错误_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《oraclerac共享内存错误》由会员分享,可在线阅读,更多相关《oraclerac共享内存错误(5页珍藏版)》请在金锄头文库上搜索。

1、ORA-04031: unable to allocate 4096 bytes of shared memory(“shared pool“,“BEGIN :EXEC_STR := SYS.DBMS.“,“PL/SQL MPCODE“,“BAMIMA: Bam Buffe二、错误原因:二、错误原因:共享内存太小,存在一定碎片,没有有效的利用保留区,造成无法分配合适的共享区。三、解决步骤:1.查看当前环境SQL show sgaTotal System Global Area 566812832 bytesFixed Size 73888 bytesVariable Size 28811264

2、 bytesDatabase Buffers 536870912 bytesRedo Buffers 1056768 bytesshow parameter shared_poolNAME TYPE VALUE- - -shared_pool_reserved_size string 1048576shared_pool_size string 20971520SQL select sum(free_space) from v$shared_pool_reserved;SUM(FREE_SPACE)-1048576我们可以看到没有合理利用保留区SQL SELECT SUM(RELOADS)/S

3、UM(PINS) FROM V$LIBRARYCACHE;SUM(RELOADS)/SUM(PINS)-.008098188不算太严重SQL SELECT round(B.Value/A.Value)*100,1) hardpasepercFROM V$SYSSTAT A,V$SYSSTAT BWHERE A.Statistic# = 171AND B.Statistic# = 172AND ROWNUM = 1;hardpaseperc-26.52.查看保留区使用情况SQL SELECT FREE_SPACE,FREE_COUNT,REQUEST_FAILURES,REQUEST_MISSE

4、S,LAST_FAILURE_SIZEFROM V$SHARED_POOL_RESERVED;FREE_SPACE FREE_COUNT REQUEST_FAILURES REQUEST_MISSES LAST_FAILURE_SIZE- - - - -1048576 1 146 0 4132最近一次申请共享区失败时该对象需要的共享区大小 4132select name from v$db_object_cache where sharable_mem = 4132;name-dbms_lob- dbms_lob 正是 exp 时申请保留区的对象3.查看导致换页的应用SQL select *

5、from x$ksmlru where ksmlrsiz0;ADDR INDX INST_ID KSMLRCOM KSMLRSIZ KSMLRNUM KSMLRHON KSMLROHV KSMLRSES50001A88 0 1 BAMIMA: Bam Buffer 4100 64 DBMS_DDL 402745060 730DEB9C50001ACC 1 1 BAMIMA: Bam Buffer 4108 736 DBMS_SYS_SQL 1909768749 730D083850001B10 2 1 BAMIMA: Bam Buffer 4112 1576 STANDARD 26794923

6、15 730D7E2050001B54 3 1 BAMIMA: Bam Buffer 4124 1536 DBMS_LOB 853346312 730DA83C50001B98 4 1 BAMIMA: Bam Buffer 4128 3456 DBMS_UTILITY 4041615653 730C5FC850001BDC 5 1 BAMIMA: Bam Buffer 4132 3760 begin :1 := dbms_lob.getLeng. 2942875191 730CFFCC50001C20 6 1 state objects 4184 1088 0 0050001C64 7 1 l

7、ibrary cache 4192 488 EXU8VEW 2469165743 730C1C6850001CA8 8 1 state objects 4196 16 0 730C0B9050001CEC 9 1 state objects 4216 3608 0 730D08383.分析各共享池的使用情况SQL select KSPPINM,KSPPSTVLfrom x$ksppi,x$ksppcvwhere x$ksppi.indx = x$ksppcv.indxand KSPPINM = _shared_pool_reserved_min_alloc;KSPPINM KSPPSTVL-

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

9、1 错误。4.解决办法:1).增大 shared_pool (在不 DOWN 机的情况下不合适)2).打 patch (在不 DOWN 机的情况下不合适)3).减小门值 (在不 DOWN 机的情况下不合适)因为 LAST_FAILURE_SIZE 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

10、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.keep5.由于数据库不能 DOWN 机,所以只能选择 3)和 4)运行 dbmspool.sqlSQL /home/oracle/products/8.1.7/rdbms/admin/dbmspool.sql找出需要 keep 到共享内存的对象SQL se

11、lect a.OWNER,a.name,a.sharable_mem,a.kept,a.EXECUTIONS ,b.address,b.hash_valuefrom v$db_object_cache a,v$sqlarea bwhere a.kept = NO and( a.EXECUTIONS 1000and a.SHARABLE_MEM 50000)or a.EXECUTIONS 10000)and SUBSTR(b.sql_text,1,50) = SUBSTR(a.name,1,50);OWNER NAME SHARABLE_MEM KEP EXECUTIONS ADDRESS HA

12、SH_VALUE- - - - - - -SELECT COUNT(OBJECT_ID) 98292 NO 103207 74814BF8 1893309624FROM ALL_OBJECTSWHERE OBJECT_NAME = :b1AND OWNER = :b2STANDARD 286632 NO 13501DBMS_LOB 98292 NO 103750DBMS_LOB 47536 NO 2886542DBMS_LOB 11452 NO 2864757DBMS_PICKLER 10684 NO 2681194DBMS_PICKLER 5224 NO 2663860SQL execute

13、 dbms_shared_pool.keep(STANDARD);SQL execute dbms_shared_pool.keep(74814BF8,1893309624,C);SQL execute dbms_shared_pool.keep(DBMS_LOB);SQL execute dbms_shared_pool.keep(DBMS_PICKLER);SQL select OWNER, name, sharable_mem,kept,EXECUTIONS from v$db_object_cache where kept = YES ORDER BY sharable_mem;SQL

14、 alter system flush shared_pool;System altered.SQL SELECT POOL,BYTES FROM V$SGASTAT WHERE NAME =free memory;POOL BYTES- -shared pool 7742756large pool 614400java pool 32768oracleali-solution oracle$ sh /home/oracle/admin/dbexp.shoracleali-solution oracle$ grep ORA- /tmp/exp.tmp未发现错误,导出数据成功四、建议:由于以上解决的方法是在不能 DOWN 机的情况下,所以没能动态修改初始化参数,但问题的本质是共享区内存过小,需要增加 shared pool,使用绑定变量,才能根本的解决问题,所以需要在适当的时候留出 DOWN 机时间,对内存进行合理的配置。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号