Files
oracle/vg/sql_profile_create_fromawr.sql
2026-03-12 21:23:47 +01:00

82 lines
2.5 KiB
MySQL

@@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