Oracle中如何分析預存程序中的sql語句?先看看如何分析語句吧。
在Oracle工具中找的分析工具:Oracle-OraHome90->Enterprise Management Packs->Tuning->Sql Analyze
開始登陸:
開始查詢分析吧。首先來個最簡單的,類似於hello word!
selece count(*) from t_atzb; 不錯執行完畢,並出現相應的統計資訊。
不過偶的很多演算法在預存程序中呢,如何執行呀?先將預存程序中的Sql語句挑出一些來分析一下。
第一個:insert into T_QB192_168_0_52 (F_TPBH,F_FQXXBH,F_TZWZBH,F_UPTIME,F_FEATURE)
select t_atzb.F_tpbh,F_FQXXBH,F_TZWZBH,F_UPTIME, F_FEATURE_DISPERSION(f_bSpatial0,f_bSpatial1,f_bSpatial2,f_bSpatial3,f_bSpatial4,f_bSpatial5,f_bSpatial6,
8936,494300,2695000,158200000,99580000,886300000,31650000000) v_Feature
from
t_atzb inner join t_atpb inner join t_ab on t_atpb.f_bh=t_ab.f_bh on t_atzb.f_tpbh =t_atpb.f_tpbh
where t_atzb.F_TPBH <>'210200200610000101';
其中凡F_FEATURE_DISPERSION是自訂的一個函數。所以執行時發生錯誤:出現錯誤在 gmjora.es 上:
XP-21016: 出現資料庫錯誤:
/**//* OracleOEM */ EXPLAIN PLAN SET statement_id = 'VMQ: 18899' INTO plan_table FOR SELECT t_atzb.f_tpbh, f_fqxxbh, f_tzwzbh, f_uptime,
F_FEATURE_DISPERSION(f_bspatial0, f_bspatial1, f_bspatial2, f_bspatial3,
f_bspatial4, f_bspatial5, f_bspatial6, 8936, 494300, 2695000, 158200000,
99580000, 886300000, 31650000000)
ORA-00904: 鏃犳晥鍒楀悕
原因: 試圖訪問 Oracle Expert 服務資料檔案庫或可最佳化的目
標資料庫時出現伺服器錯誤。錯誤文本提供具體的
Oracle Server 錯誤訊息。
操作: 如果錯誤中指明了一個環境問題 (例如: 常式未啟動),
請解決該問題。
還出現亂碼了,總之不能分析了吧,不知道還有什麼方法?
在網上搜搜,試試這個吧:在SqlPlus中分析Sql語句。
1>開啟D:\oracle\ora90\sqlplus\admin\plustrce.sql檔案
後複製以下幾句話:
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$session to plustrace;
grant plustrace to dba with admin option;
2>以sys使用者登陸SqlPlus,並執行以上語句(以前沒有plustrace的話drop時會提示錯誤,沒有關係)。
3>將產生的plustrace角色賦予一般使用者bmrsauto.grant plustrace to bmrsauto;
4>開啟檔案:D:\oracle\ora90\rdbms\admin\utlxplan.sql
複製該建立表語句:create table PLAN_TABLE (
statement_id varchar2(30),
timestamp date,
remarks varchar2(80),
operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric);
5>以bmrsauto使用者登陸sqlplus。粘貼該語句並執行。
6>在sqlplus中執行代碼:
set time on (說明:開啟時間顯示)
set autotrace on (說明:開啟自動分析統計,並顯示SQL語句的運行結果)
set autotrace traceonly (說明:開啟自動分析統計,不顯示SQL語句的運行結果)
不錯吧,可以分析含有預存程序的sql語句了。
參考網站:http://fengyu.china.com/plan.htm