情景: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.备注,替换的内容部份