在10g中提供了新的dbms_shared_pool包可以實現該功能(如果該包沒有安裝,可以通過?/rdbms/admin/dbmspool.sql安裝,11g中不需要安裝;
腳本:
set echo off set verify off set serveroutput on set lines 170 set pages 10 PROMPT PROMPT +------------------------------------------------------------------------+ PROMPT | display one object type,owner,time,status | PROMPT +------------------------------------------------------------------------+ PROMPT ACCEPT sql_id prompt 'Enter Search Object Name (i.e. a6wbhyug5tand) : ' ACCEPT plan prompt 'Enter Heap 0(all info) or Heap 6(only plan) (i.e 1 or 6) : ' COL address NEW_V address; COL hash_value NEW_V hashvalue; select address from v$sqlarea where sql_id='&sql_id' / select hash_value from v$sqlarea where sql_id='&sql_id' / alter session set events '5614566 trace name context forever'; exec dbms_shared_pool.purge ('&address,&hashvalue','C',&plan); clear breaks set verify on set serveroutput off set feedback on set linesize 78 termout on feedback 6 heading on; set echo on /
測試:
SQL> select sql_id,sql_text from v$sql where sql_text like '%+dw%';
SQL_ID
-------------
SQL_TEXT
------------------------------------------------------------------------------
1q3rx1rjj4xab
select sql_id from v$sql where sql_text like '%*+dw*%'
gkhyn9s0uj9q5
select sql_id,sql_text from v$sql where sql_text like '%*+dw*%'
SQL_ID
-------------
SQL_TEXT
------------------------------------------------------------------------------
cp9b3u7q0vdk2
select /* +dw*/ count(*) from t2
29b4zc69u7x32
SQL_ID
-------------
SQL_TEXT
------------------------------------------------------------------------------
select sql_id,sql_text from v$sql where sql_text like '%+dw%'
SQL> @cursor_purge
SQL> set echo off
+------------------------------------------------------------------------+
| display one object type,owner,time,status |
+------------------------------------------------------------------------+
Enter Search Object Name (i.e. a6wbhyug5tand) : cp9b3u7q0vdk2
Enter Heap 0(all info) or Heap 6(only plan) (i.e 1 or 6) : 1
ADDRESS
----------------
00000000691C3F40
HASH_VALUE
----------
3960321602
Session altered.
PL/SQL procedure successfully completed.
SQL>
SQL> select sql_id,sql_text from v$sql where sql_text like '%+dw%'
2 ;
SQL_ID
-------------
SQL_TEXT
------------------------------------------------------------------------------
5b7tntxrfwna4
select sql_id,sql_text from v$sql where sql_text like '%+dw%'
1q3rx1rjj4xab
select sql_id from v$sql where sql_text like '%*+dw