grwdpy
中级会员
精华贴数 0
个人空间 0
技术积分 1102 (1606)
社区积分 1 (37239)
注册日期 2005-4-6
论坛徽章:2
|
|
|
使用DBMS_PROFILER 调试存储过程
下面是我使用DBMS_PROFILER 调试存储过程一个实例,记录在这里,需要的朋友可以参考下,大家共同进步...
1、以dba身份登录,安装DBMS_PROFILER package(下面所用到的sql文件都在E racleproduct10.2.0db_1RDBMSADMIN目录下)
SQL> start E:Informationoracle学习专题文档ProcedureTraceprofload.sql;
注意,在运行的时候,必须包含dbmspbp.sql、prvtpbp.plb两个文件
2、创建用户并赋权(专门用来针对pro调试信息的)
SQL> CREATE USER profiler IDENTIFIED BY profiler DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
SQL> GRANT connect TO profiler;
3、创建同义词
SQL> CREATE PUBLIC SYNONYM plsql_profiler_runs FOR profiler.plsql_profiler_runs;
SQL> CREATE PUBLIC SYNONYM plsql_profiler_units FOR profiler.plsql_profiler_units;
SQL> CREATE PUBLIC SYNONYM plsql_profiler_data FOR profiler.plsql_profiler_data;
SQL> CREATE PUBLIC SYNONYM plsql_profiler_runnumber FOR profiler.plsql_profiler_runnumber;
4、连接Profiler用户并且运行proftab.sql
SQL> connect [email=profiler/profiler@rsdb] profiler/profiler@rsdb[/email]
SQL> start E:Informationoracle学习专题文档ProcedureTraceproftab.sql;
5、连接相关用户,调试存储过程
SQL> conn [email=sis_test/sis_test@rsdb] sis_test/sis_test@rsdb[/email]
已连接。
SQL> Declare
2 l_result binary_integer;
3 begin
4 l_result :=DBMS_PROFILER.start_profiler(run_comment => 'P_RandomChange:' || sysdate);
5 P_RandomChange();
6 l_result := DBMS_PROFILER.stop_profiler;
7 end;
8 /
以上代码中,P_RandomChange就是我所调试的存储过程。
6、查看结果:
SQL> set linesize 1000;
SQL> set trimout on
SQL> column runid format 99999
SQL> column run_comment format A50
SQL> select runid,to_char(run_date,'yyyy-mm-dd hh24:mi:ss') run_date ,run_comment,run_total_time
2 from plsql_profiler_runs order by runid;
RUNID RUN_DATE RUN_COMMENT RUN_TOTAL_TIME
------ -------------- -------------------------------------------------- --------------
1 21-5月 -08 P_RandomChange:21-5月 -08 337749000
SQL> Column runid FORMAT 99999
SQL> column unit_number format 99999
SQL> column unit_owner format A20 --设置列unit_owner显示的字符宽度(以字符格式显示,每行20个字符)
SQL> column unit_name format A20
SQL> select u.unit_owner,u.unit_name,d.line#,d.total_occur,d.total_time,d.min_time,d.max_time from p
lsql_profiler_units u right join plsql_profiler_data d
2 on u.runid=d.runid and u.unit_number=d.unit_number
3 where lower(unit_name)='p_randomchange' order by unit_name,line#;
UNIT_OWNER UNIT_NAME LINE# TOTAL_OCCUR TOTAL_TIME MIN_TIME MAX_TIME
-------------------- -------------------- ---------- ----------- ---------- ---------- ------------------------------ -------------------- ---------- ----------- ---------- ---------- ----------
SIS_HIS_TEST P_RANDOMCHANGE 1 1 5000 5000 5000
SIS_HIS_TEST P_RANDOMCHANGE 4 1 0 0 0
SIS_HIS_TEST P_RANDOMCHANGE 5 1001 983000 1000 7000
SIS_HIS_TEST P_RANDOMCHANGE 7 1000 1278000 1000 6000
SIS_HIS_TEST P_RANDOMCHANGE 12 1000 88196000 1000 309000
SIS_HIS_TEST P_RANDOMCHANGE 14 1 0 0 0
SIS_HIS_TEST P_RANDOMCHANGE 15 1 283000 283000 283000
SIS_HIS_TEST P_RANDOMCHANGE 16 1 3000 3000 3000
-------------------- -------------------- ---------- ----------- ---------- ---------- ------------------------------ -------------------- ---------- ----------- ---------- ---------- ----------
已选择8行。
从上面的结果可以看出总的调试时间,以及耗时最长的行的执行时间。也可以直接登录profiler用户(密码也是profiler)直接查看结果,只有第一次才需要运行以上的sql文件,以后便可以直接调试。
|
只看该作者
|
|