构造绑定含有绑定变量的JAVA的SQL语句执行计划

情景:11G R2,有条SQL执行计划有异常,内存中并没有好的现存的执行计划(baseline用不了),经确认可通过sql profile 绑定固定;


----------------------------------------------------

SQL的样式:

select *

from *

where a=:1

and b=:2

and c=:3

......

----------------------------------------------------

准备的工具:coe_xfr_sql_profile.sql,可以在MOS或者网上找到

操作的步骤:

1.添加hint,传入绑定变量,将变量:1,:2,:3转为普通的:varname1,:varname2,:varname3类似格式

var varname1 number;

var varname2 number;

var varname3 number;

exec :varname1 :=23;

exec :varname2 :=24;

exec :varname3 :=25;

多次运行SQL,使之存于内存;

select *

from *

where a=:varname1

and b=:varname2

and c=varname3

......;

2.运行完后即刻查看获取其plan_hash_value,sql_id

select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));


3.操作思路为:(1)根据旧的SQL(sql_id,plan_hash_value)生成一个.sql文件 (2)根据修改后的sql(sql_id,plan_hash_value)生成一个.sql文件 (3)将新生成的.sql文件里的hint部份覆盖相应旧的.sql文件的相应位置(4)再执行修改后的.sql文件即可绑定;


4.备注,替换的内容部份

h := SYS.SQLPROF_ATTR(
------
------
省略部份
q'[END_OUTLINE_DATA]');



你可能感兴趣的:(构造绑定含有绑定变量的JAVA的SQL语句执行计划)