@@header /* * * Author : Vishal Gupta * Purpose : Create SQL Profile from AWR Repository * Parameters : 1 - SQL ID * 2 - PLAN_HASH_VALUE * 3 - SQL Profile Categor, usually "DEFAULT" * 4 - FORCE_MATCH, possibile values - TRUE or FALSE * 5 - SQL Profile Description * * * Revision History: * =================== * Date Author Description * --------- ------------ ----------------------------------------- * 16-May-12 Vishal Gupta Created * */ DEFINE SQLID="&&1" DEFINE PLAN_HASH_VALUE="&&2" DEFINE CATEGORY="&&3" DEFINE FORCE_MATCH="&&4" DEFINE DESCRIPTION="&&5" set serveroutput on declare ar_profile_hints sys.sqlprof_attr; cl_sql_text clob; l_profile_name VARCHAR2(30) := 'PROF_' || '&&SQLID' || '_' || '&&PLAN_HASH_VALUE'; begin SELECT extractvalue(value(d), '/hint') AS outline_hints bulk collect INTO ar_profile_hints FROM xmltable('/*/outline_data/hint' passing (SELECT xmltype(other_xml) AS xmlval FROM dba_hist_sql_plan s , v$database d WHERE d.dbid = s.dbid AND sql_id = '&&SQLID' AND plan_hash_value = &&PLAN_HASH_VALUE AND other_xml IS NOT NULL ) ) d; SELECT sql.sql_text INTO cl_sql_text FROM dba_hist_sqltext sql , v$database d WHERE d.dbid = sql.dbid AND sql.sql_id = '&&SQLID'; dbms_sqltune.import_sql_profile( sql_text => cl_sql_text , profile => ar_profile_hints , category => '&&CATEGORY' , name => l_profile_name , description => '&&DESCRIPTION' -- use force_match => true -- to use CURSOR_SHARING=SIMILAR -- behaviour, i.e. match even with -- differing literals , force_match => &&FORCE_MATCH -- , replace => true ); dbms_output.put_line(' '); dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); dbms_output.put_line(' '); end; / UNDEFINE SQLID UNDEFINE PLAN_HASH_VALUE UNDEFINE CATEGORY UNDEFINE FORCE_MATCH UNDEFINE DESCRIPTION @@footer