天天看點

Oracle使用SPM對含有綁定變量SQL做固定的方法

Oracle使用SPM對含有綁定變量SQL做固定的方法

一般SPM固定如果目标SQL沒有綁定變量,那麼直接對目标SQL添加HINT然後産生的執行計劃用SPM來“偷天換日”。

如果是含有綁定變量,這裡有兩種情況。

情況1:select * from t where t.id=:A;

這種情況可以使用定義變量A後指派然後添加HINT到含有綁定變量的原SQL中執行以擷取想要的執行計劃然後用SPM替換并固定。

var A number;
exec :A := 100;
select * from t where t.id=:A;

--擷取SQL_ID和執行計劃(含有Plan Hash值)
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));      

情況2:select * from t where t.id=:1;

由于變量名無法用資料定義,是以情況1不适用。

可以通過視圖DBA_HIST_SQLBIND或者GV$SQL_BIND_CAPTURE擷取綁定變量值然後直接替換到原SQL中,擷取想要的執行計劃然後用SPM替換并固定。