首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle:有没有跟踪查询的工具,比如Profiler for sql server?

Oracle:有没有跟踪查询的工具,比如Profiler for sql server?
EN

Stack Overflow用户
提问于 2008-09-29 13:31:19
回答 10查看 172.6K关注 0票数 91

我使用sql server,但我必须迁移到使用Oracle DB的应用程序。为了跟踪我的应用程序查询,在Sql Server中,我使用了非常棒的Profiler工具。甲骨文有没有类似的东西?

EN

回答 10

Stack Overflow用户

发布于 2008-09-29 14:40:36

您可以使用Oracle Enterprise Manager监视活动会话,包括正在执行的查询、其执行计划、锁、一些统计信息,甚至是较长任务的进度条。

请参阅:http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

转到Instance session并查看每个会话的->选项卡。

还有其他方法。企业管理器只是把已经在特殊视图中可用的东西加上了漂亮的颜色,就像这里记录的那些:http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

当然,您还可以使用Explain PLAN FOR、TRACE工具和大量其他的工具化方法。企业管理器中有一些针对开销最大的SQL查询的报告。您还可以搜索保存在缓存中的最新查询。

票数 22
EN

Stack Overflow用户

发布于 2014-06-02 15:22:19

我找到了一个简单的解决方案

Step1。使用PLSQL或sqldeveloper或任何其他查询界面,以管理员用户身份连接到数据库

Step2。运行下面的脚本;在S.SQL_TEXT列中,您将看到执行的查询

代码语言:javascript
复制
SELECT            
 S.LAST_ACTIVE_TIME,     
 S.MODULE,
 S.SQL_FULLTEXT, 
 S.SQL_PROFILE,
 S.EXECUTIONS,
 S.LAST_LOAD_TIME,
 S.PARSING_USER_ID,
 S.SERVICE                                                                       
FROM
 SYS.V_$SQL S, 
 SYS.ALL_USERS U
WHERE
 S.PARSING_USER_ID=U.USER_ID 
 AND UPPER(U.USERNAME) IN ('oracle user name here')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

唯一的问题是,我找不到一种方法来显示输入参数值(用于函数调用),但至少我们可以看到在Oracle中运行的内容以及它的顺序,而不需要使用特定的工具。

票数 22
EN

Stack Overflow用户

发布于 2014-04-11 09:54:33

代码语言:javascript
复制
alter system set timed_statistics=true

--或者

代码语言:javascript
复制
alter session set timed_statistics=true --if want to trace your own session

--必须足够大:

代码语言:javascript
复制
select value from v$parameter p
where name='max_dump_file_size' 

--查找您感兴趣的会话的sid和serial#:

代码语言:javascript
复制
 select sid, serial# from v$session
 where ...your_search_params...

--您可以从10046事件开始跟踪,第四个参数设置跟踪级别(12是最大的):

代码语言:javascript
复制
 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

--关闭跟踪并将级别设置为零:

代码语言:javascript
复制
begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/*possible级别:0-关闭1-最低级别。与set sql_trace=true非常类似,4-将绑定变量值添加到跟踪文件8-添加等待12 -同时添加绑定变量值和等待事件*/

--如果你想用更大的级别跟踪你自己的会话,也一样:

代码语言:javascript
复制
alter session set events '10046 trace name context forever, level 12';

--关闭:

代码语言:javascript
复制
alter session set events '10046 trace name context off';

--将找到包含原始跟踪信息的文件:

代码语言:javascript
复制
 select value from v$parameter p
 where name='user_dump_dest'

--文件名(*.trc)将包含spid:

代码语言:javascript
复制
 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...your_search_params...

--您也可以自行设置名称:

代码语言:javascript
复制
alter session set tracefile_identifier='UniqueString'; 

--最后,使用TKPROF使跟踪文件更具可读性:

代码语言:javascript
复制
C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>

--要查看跟踪文件的使用状态:

代码语言:javascript
复制
set serveroutput on size 30000;
declare
  ALevel binary_integer;
begin
  SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
  if ALevel = 0 then
    DBMS_OUTPUT.Put_Line('sql_trace is off');
  else
    DBMS_OUTPUT.Put_Line('sql_trace is on');
  end if;
end;
/

翻译后的http://www.sql.ru/faq/faq_topic.aspx?fid=389原版更完整,但无论如何这比其他人发布的要好。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/148648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档