应用服务器是weblogic6.1,数据库是Oracle的8i,是用JSP开发的,为什么有时候页面会报错:你的请求不能被执行 
系统运行出现问题 
ORA-04031: 无法分配 4200 字节的共享内存 ("shared pool","unknown object","sga heap","state objects") 
请与系统管理员联系。 有人说因为程序写的不好,不能够很好的进行重复调用,从而导致经常性SQL编译,致使SHARED POOL内碎片太多,从而导致没有连续的SHARED POOL可以使用,引发ORA-04031;究竟是不是这个问题,应该怎样可以解决?

解决方案 »

  1.   

    可能是因为你的sql写的不好,sql重用率低,写sql时候,对于相似的sql一定要绑定参数,你也可以定期的flush shared_pool,flush shared_pool会降低性能,建议在不忙的时候做。
      

  2.   

    怎样用flush shared_pool?具体需要怎样做?
    有人说可以把shared_pool设大点,可以设到服务器内存的1/2或1/4,是不是应该设到那么大?
      

  3.   

    flush shared_pool 就是清理 shared_pool ,使用这个语句: alter system flush shared_pool;  就可以了。关于 shared_pool 的大小,要看你的系统的实际情况了。
    oracle 会给你个建议值,但是具体情况具体分析了,你可以先设置一个值比如(1/4),运行一段时间根据观察的情况,再做调整。我觉得主要影响它的大小的有下面几个因素:
    1、sql 重用率,这点很重要。
    2、联入数据库的session 数量,因为 session 的一些 UGA信息存再 shared pool 中
      

  4.   

    你的shared_pool在创建数据库的时候设置的太小了,需要增大
      

  5.   

    以前我也遇见过,增大shared_pool就可以了我们的数据库,100个并发用户,我给了64M
      

  6.   

    ORA-04031的错误挺常见的.http://www.happyit.net/download/ORA-04031.pdf
    这里有个PDF的文档,希望对你有帮助.BTW:CSDN的论坛功能实在是少