oracle dbms_profiler使用问题

呆瓜呆呆 2014-10-26 10:16:38
问题描述:在使用dbms_profiler分析执行的pl/sql块的时候PLSQL_PROFILER_RUNS 、PLSQL_PROFILER_DATA、PLSQL_PROFILER_UNITS这三个表中没有完整的数据。
具体操作如下:
--安装DBMS_PROFILER包
CONNECT / AS SYSDBA
@$ORACLE_HOME/rdbms/admin/profload.sql

--创建profile表空间提供给profiler用户
DROP USER profiler CASCADE;
DROP TABLESPACE profile_tbs INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

CREATE TABLESPACE profile_tbs
DATAFILE '/u01/app/oracle/oradata/normal/profiletbs01.dbf'
SIZE 50M;

--创建profiler用户默认表空间为profile_tbs
CREATE USER profiler
IDENTIFIED BY oracle
DEFAULT TABLESPACE profile_tbs;

--为profiler用户授予相应的权限
GRANT CONNECT, RESOURCE TO profiler;

--为profiler用户创建共有同义词提供给所有的用户访问
DROP PUBLIC SYNONYM plsql_profiler_runs;
DROP PUBLIC SYNONYM plsql_profiler_units;
DROP PUBLIC SYNONYM plsql_profiler_data;
DROP PUBLIC SYNONYM plsql_profiler_runnumber;

CREATE PUBLIC SYNONYM plsql_profiler_runs
FOR profiler.plsql_profiler_runs;
CREATE PUBLIC SYNONYM plsql_profiler_units
FOR profiler.plsql_profiler_units;
CREATE PUBLIC SYNONYM plsql_profiler_data
FOR profiler.plsql_profiler_data;
CREATE PUBLIC SYNONYM plsql_profiler_runnumber
FOR profiler.plsql_profiler_runnumber;

--使用profiler用户登录创建工具表,并授予共有访问权限
CONNECT profiler/oracle
@$ORACLE_HOME/rdbms/admin/proftab.sql
GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC;
GRANT SELECT, INSERT, DELETE ON plsql_profiler_data TO PUBLIC;
GRANT SELECT, INSERT, DELETE ON plsql_profiler_units TO PUBLIC;
GRANT SELECT, INSERT, DELETE ON plsql_profiler_runs TO PUBLIC;

--做测试DBMS_PROFILER实验
create table tab_test (a int);

CREATE OR REPLACE PROCEDURE sp_test
AS
BEGIN
FOR I IN 1 .. 100000 LOOP
INSERT INTO tab_test VALUES (I);
END LOOP;
COMMIT;
END;
/

DECLARE
v_run_number integer;
BEGIN
--启动profiler
v_run_number := DBMS_PROFILER.start_profiler(run_comment=>'sp_test:' || SYSDATE);
--显示当前跟踪的运行序号(后面查询要用)
DBMS_OUTPUT.put_line('run_number:' || v_run_number);
--运行要跟踪的PLSQL
sp_test;
--停止profiler
v_run_number := DBMS_PROFILER.stop_profiler;
END;
/

--以下是我分别查询PLSQL_PROFILER_RUNS 、PLSQL_PROFILER_DATA、PLSQL_PROFILER_UNITS表的数据信息
select runid,run_owner,run_date,run_total_time from plsql_profiler_runs;
RUNID RUN_OWNER RUN_DATE RUN_TOTAL_TIME
---------- -------------------------------- --------- --------------
1 CHENHAO 26-OCT-14

SQL> select * from PLSQL_PROFILER_DATA;
no rows selected

SQL> select * from PLSQL_PROFILER_UNITS;
no rows selected

以上可以看到PLSQL_PROFILER_RUNS 表的RUN_TOTAL_TIME字段没有值、PLSQL_PROFILER_DATA、PLSQL_PROFILER_UNITS表中根本就没有数据
求解决。
...全文
296 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_37135130 2016-12-22
  • 打赏
  • 举报
回复
GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC; SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_data TO PUBLIC; SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_units TO PUBLIC; SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_runs TO PUBLIC; 对表赋权限的时候报同义词循环链的错误,百度了一下,查同义词没有对象的数据库对象没有记录 求大神指点!!!!
wangwei 2014-10-27
  • 打赏
  • 举报
回复
看步骤没有问题
呆瓜呆呆 2014-10-27
  • 打赏
  • 举报
回复
引用
5楼解答
5楼正解,我用你的代码页执行成功了,并且使用其他用户也能成功的运行,谢谢你的帮助。要是能说明白都我的代码为什么发生没有数据的情况那就完美了。
CT_LXL 2014-10-27
  • 打赏
  • 举报
回复
引用 楼主 ch7543658 的回复:
查看一下包是否存在, desc dbms_profiler ; 实在不行你用sys账户试试
CT_LXL 2014-10-27
  • 打赏
  • 举报
回复
引用 3 楼 ch7543658 的回复:
以下的代码我已成功实践过,你可以参考一下(其中牵涉的两个SQL文件你需要在你对应的ORACLE_HOME下找到并成功执行):

[oracle@localhost admin]$ sqlplus / as sysdba
 
SQL>@/home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/profload.sql
 
SQL> desc dbms_profiler;
 
SQL> CREATE USER profiler IDENTIFIED BY oracle;
 
SQL> grant connect,resource to profiler;
 
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;
 
SQL> conn profiler/oracle
 
SQL> @/home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/proftab.sql
 
SQL> GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC;
 
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_data TO PUBLIC;
 
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_units TO PUBLIC;
 
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_runs TO PUBLIC;
 
SQL> create table tab_test (a int);
 
 
CREATE OR REPLACE PROCEDURE sp_test
AS
BEGIN
   FOR I IN 1 .. 100
   LOOP
      INSERT INTO tab_test
        VALUES   (I);
   END LOOP;
   COMMIT;
END;
/
SQL> set serverout on
 
SQL> DECLARE
   v_run_number   integer;
   v_temp1        integer;
BEGIN
   --启动profiler
   sys.DBMS_PROFILER.start_profiler (run_number => v_run_number);
   --显示当前跟踪的运行序号(后面查询要用)
   DBMS_OUTPUT.put_line ('run_number:' || v_run_number);
   --运行要跟踪的PLSQL
   sp_test;
   --停止profiler
   sys.DBMS_PROFILER.stop_profiler;
END;
/
SQL> select runid,run_owner,run_date,run_total_time from plsql_profiler_runs;
 
 
SQL> select unit_number,unit_type,unit_owner,unit_name,unit_timestamp,total_time from plsql_profiler_units where runid = ‘上面找到的runid’ and unit_name = 'SP_TEST';
 
 
SQL> select runid,unit_number,line#,total_occur,total_time,min_time,max_time from plsql_profiler_data where runid = '上面找到的runid' and unit_number = 2;
呆瓜呆呆 2014-10-27
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 ch7543658 的回复:]
查看一下包是否存在, desc dbms_profiler ; 实在不行你用sys账户试试 [/quote] 你好!我用了sys用户执行成功了
select runid, RUN_OWNER, RUN_DATE, RUN_TOTAL_TIME from PLSQL_PROFILER_RUNS;

     RUNID RUN_OWNER                        RUN_DATE  RUN_TOTAL_TIME
---------- -------------------------------- --------- --------------
         3 SYS                              27-OCT-14     1.4080E+10
		 
select * from PLSQL_PROFILER_UNITS;

     RUNID UNIT_NUMBER UNIT_TYPE                        UNIT_OWNER                       UNIT_NAME                        UNIT_TIME TOTAL_TIME     SPARE1     SPARE2
---------- ----------- -------------------------------- -------------------------------- -------------------------------- --------- ---------- ---------- ----------
         3           1 PACKAGE BODY                     SYS                              DBMS_PROFILER                    17-SEP-11          0
         3           2 ANONYMOUS BLOCK                  <anonymous>                      <anonymous>                      00-DECEMB          0
         3           3 PACKAGE BODY                     SYS                              DBMS_OUTPUT                      17-SEP-11          0
         3           4 PROCEDURE                        SYS
但是我想我一下,要如何使用其他用户执行呢?
解压后安装默认英文版,需要中文请安装_CHS.exe的汉化补丁。第一次启动提示注册,使用注册机算出序列号、密码等。附带一份中文PLSQL教程 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要优势。 性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。   更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。   HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL Developer工作环境中,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。   非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/SQL Developer就将生成相应的SQL,从而创建或转换对象。   模板列表——PL/SQL Developer的模板列表可用作一个实时的帮助组件,协助您强制实现标准化。只要点击相应的模板,您就可以向编辑器中插入标准的SQL或PL/SQL代码,或者从草稿出发来创建一个新程序。   查询构建器——图形化查询构建器简化了新选择语句的创建和已有语句的修改过程。只要拖放表格和视窗,为区域列表选择专栏,基于外部键约束定义联合表格即可。   比较用户对象——对表格定义、视图、程序单元等作出修改后,将这些修改传递给其他数据库用户或检查修改前后的区别将是非常有用的。这也许是一个其他的开发环境,如测试环境或制作环境等。而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。   导出用户对象——该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建对象,也可以保存文件作为备份。   工具——PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找数据库源中文本、导入或导出表格、生成测试数据、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话信息等。   授权——大多数开发环境中,您不希望所有数据库都具备PL/SQL Developer的全部功能性。例如,数据库开发中您可以允许PL/SQL Developer的全部功能性,而数据库测试中您可以仅允许数据查询/编辑和对象浏览功能,而数据库制作中您甚至根本不希望PL/SQL Developer访问。利用PL/SQL Developer授权功能,您可以方便的定义特定用户或规则所允许使用的功能。   插件扩展——可以通过插件对PL/SQL Developer功能进行扩展。Add-ons页面提供插件可以免费下载。Allround Automations或其他用户均可提供插件(如版本控制插件或plsqldoc插件)。如果您具备创建DLL的编程语言,您还可以自己编写插件。   多线程IDE——PL/SQL Developer是一个多线程IDE。这样,当SQL查询、PL/SQL程序、调试会话等正在运行时,您依然可以继续工作。而且,该多线程IDE还意味着出现编程错误时不会中止:您在任何时间都可以中断执行或保存您的工作。   易于安装——不同于SQL*Net,无需中间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用软件了。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧