DBMS_UTILITY.EXEC_DDL_STATEMENT('alter system flush shared_pool');
如何让上面那句有效??

解决方案 »

  1.   

    SQL> exec DBMS_UTILITY.EXEC_DDL_STATEMENT('alter system flush shared_pool');
     
    PL/SQL procedure successfully completed
     
    SQL> alter system flush shared_pool;
     
    System altered
     
    SQL> 
      

  2.   

    执行是可以,但是用DBMS_UTILITY.EXEC_DDL_STATEMENT('alter system flush shared_pool');
    调用清理不了shared pool; 只有命令行下执行'alter system flush shared_pool'才有效;
    即:
    SQL> alter system flush shared_pool;
     
    System altered
    SQL>后shared_pool才能被清理,为啥??
      

  3.   

    你怎么确认dbms_utility形式没清空sharepool呢?
      

  4.   

    执行完后;
    执行
    SQL> select * from v$sgastat where name = 'free memory';
    POOL        NAME                            BYTES
    ----------- -------------------------- ----------
    shared pool free memory                  65153244
    large pool  free memory                  49777268
    java pool   free memory                  33554432其中shared pool free memory                  65153244没有变化,以下是全过程
    SQL> exec DBMS_UTILITY.EXEC_DDL_STATEMENT('alter system flush shared_pool');
     
    PL/SQL procedure successfully completed
     
    SQL> select * from v$sgastat where name = 'free memory';
     
    POOL        NAME                            BYTES
    ----------- -------------------------- ----------
    shared pool free memory                  65153244
    large pool  free memory                  49777268
    java pool   free memory                  33554432
     
    SQL> alter system flush shared_pool;
     
    System altered
     
    SQL> select * from v$sgastat where name = 'free memory';
     
    POOL        NAME                            BYTES
    ----------- -------------------------- ----------
    shared pool free memory                 182859624
    large pool  free memory                  50313820
    java pool   free memory                  33554432
     
    SQL>