-- Creation du SQL baseline à partir d'un plan dans le library cache -- et injection dans un sql_text spécifique -- Dans l'exemple suivant, nous créons un SQL Baseline pour le SQL ayant le texte du SQL_ID=81qv4d7vkb571, -- à partir d'un plan dans le library cache: SQL_ID=chhkmc32mdkak, PLAN_HASH_VALUE=2494645258 set serveroutput ON declare sqltext_without_hint clob; ret pls_integer; begin select SQL_FULLTEXT into sqltext_without_hint from V$SQL where sql_id = '81qv4d7vkb571' and CHILD_NUMBER=0; ret := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( SQL_ID =>'chhkmc32mdkak', PLAN_HASH_VALUE => 2494645258, SQL_TEXT => sqltext_without_hint); dbms_output.put_line(ret || ' SQL plan baseline(s) created'); end; / -- Liste des SQL baseslines, par contre, il n'y a pas le plan_id ----------------------------------------------------------------- set lines 180 pages 999 col created for a20 trunc col signature for 9999999999999999999 select signature, sql_handle, plan_name, enabled, accepted, fixed, origin,created from dba_sql_plan_baselines; -- Pour avoir le plan_id ------------------------ SELECT TO_CHAR(so.signature) signature , so.plan_id , DECODE(ad.origin, 1, 'MANUAL-LOAD', 2, 'AUTO-CAPTURE', 3, 'MANUAL-SQLTUNE', 4, 'AUTO-SQLTUNE', 5, 'STORED-OUTLINE', 'UNKNOWN') origin , DECODE(BITAND(so.flags, 1), 1, 'YES', 'NO') enabled , DECODE(BITAND(so.flags, 2), 2, 'YES', 'NO') accepted , DECODE(BITAND(so.flags, 64), 64, 'NO', 'YES') reproduced FROM sys.sqlobj$ so , sys.sqlobj$auxdata ad WHERE ad.signature = so.signature AND ad.plan_id = so.plan_id AND so.signature = 9005682359107037619; -- Pour avoir le OUTLINE du plan_id ----------------------------------- select cast(extractvalue(value(x), '/hint') as varchar2(500)) as outline_hints from xmltable('/outline_data/hint' passing (select xmltype(comp_data) xml from sys.sqlobj$data where signature = 9005682359107037619 and plan_id = 263533726)) x; -- Drop d'un SQL baseline ------------------------- set serveroutput ON DECLARE v_dropped_plans number; BEGIN v_dropped_plans := DBMS_SPM.DROP_SQL_PLAN_BASELINE ( sql_handle => 'SQL_7cfa9c643693a9b3', plan_name=>'SQL_PLAN_7tynwchv97admdbd90e8e' ); DBMS_OUTPUT.PUT_LINE('dropped ' || v_dropped_plans || ' plans'); END; /