ORA-04031 错误产生原因:
1. 大量的硬解析出现。
2. 突然出现一个大的 SQL
解决 04031 错误解决办法:
(1) 直接执行 SQL> alter system flush shared_pool;
这个办法可以进行缓解,但是没有根本解决问题。
(2) 将没有共享的 SQL 转换为共享 SQL 。(使用绑定变量)
(3) 修改 cursor_sharing 参数
SQL> alter system set cursor_sharing= ’ force ’ ;
修改完这个参数可以强制进行绑定变量,来实现共享 SQL 。但是如果是书写不规范,如空格、回车等导致的不能共享 SQL ,此时不能解决。
( 4 )① 执行 @?/rdbms/admin/dbmspool.sql
② SQL> select * from v$db_object_cache where sharable_mem > 10000 and (type = ‘ PACKAGE ’ or type = ‘ PACKAGE BODY ’ or type = ‘ FUNCTION ’ or type = ‘ PROCEDURE ’ ) and kept = ‘ NO ’ ;
③ 执行 dbms_shared_pool.keep( ‘ 对象名 ’ );
( 5 )增加 shared_pool 空间
SQL> select component,current_size/1024/1024 M from v$sga_dynamic_components;
SQL> show parameter sga_target
SQL> show parameter sga_max_size
SQL> alter system set shared_pool_size=150M scope=both;
注: sga_max_size 是用来限制 sga_targat 的大小。 Sga_target 始终不能超过 sga_max_size 。
(6) 保留区
保留区专门给大 SQL 进行缓存
SQL> select request_misses from v$shared_pool_reserved;
该查询是查询在保留区里请求失败的次数。这个数值最好是 ,当这个数值存在的时候,一定会发生 04031 错误。
调整保留区大小 :
SQL> show parameter shared_pool_reserved_size;
当 request_misses 存在不是 的数值时,我们就需要将 shared_pool_reserved_size 调大一些。
--------------- end -----------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2640867/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31529886/viewspace-2640867/