`
1enny
  • 浏览: 70198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

解决4031错误

 
阅读更多
oracle013

有五种解决4031错误,那么他们分别是什么原理呢?
1. alter system flush shared_pool//清除shared_pool.治标不治本的方式
2. 共享SQL:
      1. 通过查询哪些语句没有共享SQL来告诉开发人员共享SQL
      2. 假如开发人员做不到共享SQL,那么就改curse_sharing,在没有实现sql共享的情况有两个:
        1. 没有绑定变量
        2. 在sql语句中存在空格、大小写、换行的情况
      3. 对于上面两种情况,设置cursing_share为force那么第一种情况,系统会强制绑定变量来实现sql共享,而第二种无效

      4. SQL> show parameter cursor;

        NAME TYPE VALUE
        ------------------------------------ ----------- ------------------------------
        cursor_sharing string EXACT
        cursor_space_for_time boolean FALSE
        open_cursors integer 300
        session_cached_cursors integer 50
        SQL> alter system set cursor_sharing='force';

        System altered.

        SQL> show parameter cursor;

        NAME TYPE VALUE
        ------------------------------------ ----------- ------------------------------
        cursor_sharing string force
        cursor_space_for_time boolean FALSE
        open_cursors integer 300
        session_cached_cursors integer 50
        SQL>

3. 通过上面的方式:4031的错误产生两种情况:
      1. 由于大量的硬解析,让free中产生了大量的free trunk;而当来了一个比较大的SQL找不到适合的trunk就会有4031错误
      2. 在程序运行一段时间,free空间自然会减少,而突然来了一个非常大的SQL这样也会出现这种4031错误,
通过第三种方式就是解决2的情况:
        1. 通过dbms_shared_pool.keep('对象名')将SQL强行缓存到lib cache中,这样做sql永远都不会被置换出来。原理图:

4,增加shared_pool空间
SQL> alter system set shared_pool_size=100;

System altered.

SQL> select COMPONENT,CURRENT_SIZE FROM V$SGA_DYNAMIC_COMPONENTS;

COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 155189248
large pool 4194304
SQL> alter system set shared_pool_size=200000000;

System altered.

SQL> select COMPONENT,CURRENT_SIZE FROM V$SGA_DYNAMIC_COMPONENTS;

COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool201326592
large pool 4194304
通过对比你会发现当设置的值比原有的值要小,那么这种设置将不能生效,

5. 保留区


SQL> show parameter shared_pool;

NAME TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
shared_pool_reserved_size big integer
7759462
shared_pool_size big integer
4M
SQL> select REQUEST_MISSES FROM V$shared_pool_reserved;

REQUEST_MISSES//假如值大于0 说明肯定有4031错误。
--------------
0

SQL>














分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics