解决方案 »

  1.   


    查看一下包是否存在,
     desc dbms_profiler  ;
    实在不行你用sys账户试试
      

  2.   


    查看一下包是否存在,
     desc dbms_profiler  ;
    实在不行你用sys账户试试

    你好!我用了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
    但是我想我一下,要如何使用其他用户执行呢?
      

  3.   

    以下的代码我已成功实践过,你可以参考一下(其中牵涉的两个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;