甲骨文:有没有一个工具来跟踪查询,如SQL Server的分析器?

我使用SQL服务器,但我必须迁移到与Oracle数据库的应用程序。 为了跟踪我的应用程序查询,我在Sql Server中使用了美妙的Profiler工具。 有没有相当于Oracle的东西?

您可以使用Oracle企业pipe理器来监视正在执行的查询,执行计划,locking,一些统计信息甚至是长期任务的进度条。

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

转到实例 – >会话,并观看每个会话的SQL选项卡。

还有其他的方法。 企业经理只是把漂亮的颜色放在什么特殊的意见,如在这里logging: http : //www.oracle.com/pls/db92/db92.catalog_views? remark=homepage

当然你也可以使用Explain PLAN FOR,TRACE工具和其他的工具化方法。 企业pipe理器中有一些关于最昂贵的SQL查询的报告。 您还可以searchcaching中最近的查询。

 alter system set timed_statistics=true 

– 要么

 alter session set timed_statistics=true --if want to trace your own session 

– 必须足够大:

 select value from v$parameter p where name='max_dump_file_size' 

– 找出您感兴趣的会议的sid和序列号:

  select sid, serial# from v$session where ...your_search_params... 

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

  begin sys.dbms_system.set_ev(sid, serial#, 10046, 12, ''); end; 

– closures跟踪设置零水平:

 begin sys.dbms_system.set_ev(sid, serial#, 10046, 0, ''); end; 

/ *可能的级别:0 – closures1 – 最低级别。 很像set sql_trace = true 4 – 绑定variables值被添加到跟踪文件8 – 等待被添加12 – 绑定variables值和等待事件都被添加* /

– 如果你想跟踪更大的水平你自己的会议:

 alter session set events '10046 trace name context forever, level 12'; 

– 关掉:

 alter session set events '10046 trace name context off'; 

– 具有原始跟踪信息的文件将位于:

  select value from v$parameter p where name='user_dump_dest' 

– 文件名(*。trc)将包含spid:

  select p.spid from v$session s, v$process p where s.paddr=p.addr and ...your_search_params... 

– 你也可以自己设定名字:

 alter session set tracefile_identifier='UniqueString'; 

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

 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> 

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

 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原来是更完整的,但无论如何,这是比别人发布恕我直言;

我发现一个简单的解决scheme

步骤1。 用pipe理员用户使用PLSQL或sqldeveloper或任何其他查询接口连接到数据库

第2步。 运行剧本的波纹pipe; 在S.SQL_TEXT列中,您将看到执行的查询

 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; 

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

试试这个(它也是免费的): http : //www.aboves.com/Statement_Tracer_for_Oracle.exe

看到我刚刚把最近的一个问题投了一个副本,并指出了这个方向。 。 。

另外一些 – 在SQL * Plus中 – SET AUTOTRACE ON – 将为每个执行的语句提供解释计划和统计信息。

TOAD也允许客户端分析。

这两者的缺点是,他们只告诉你这个语句的执行计划,而不是这个优化器是如何到达这个计划的 – 因为你需要更低级别的服务器端跟踪。

另一个需要了解的重要问题是Statspack快照 – 它们是查看整个数据库性能的好方法。 解释计划等,善于发现个别的SQL语句是瓶颈。 Statspack很擅长识别你的问题,一个简单的语句和一个好的执行计划在一分钟内被称为100万次。

GI Oracle Profiler v1.2

这是Oracle的工具,用于捕获执行类似于SQL Server Profiler的查询。 维护使用此数据库服务器的应用程序的不可或缺的工具。

你可以从官方网站iacosoft.com下载

尝试PL / SQL Developer它有一个很好的用户界面友好的graphics界面。 试用一下就可以了。 在Oracle数据库上工作时,我发誓这个工具。

http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw

Catch捕获两个时间点之间运行的所有SQL。 就像SQL Server也一样。

在某些情况下,捕获特定用户在数据库中运行的SQL很有用。 通常您只需为该用户启用会话跟踪,但该方法存在两个潜在的问题。

  1. 首先,许多基于Web的应用程序都维护一个由多个用户共享的永久数据库连接池。
  2. 第二个是有些应用程序连接,运行一些SQL,并且很快断开连接,这使得根本无法启用会话跟踪(当然,在这种情况下,您可以使用login触发器来启用会话跟踪)。

这个问题的一个快速和肮脏的解决scheme是捕获在两个时间点之间运行的所有SQL语句。

以下过程将创build两个表,每个表包含特定点上的数据库快照。 然后查询这些表以产生在此期间所有SQL运行的列表。

如果可能的话,你应该在一个安静的开发系统上这样做 – 否则你可能会冒太多的风险。

  1. 采取第一个快照运行下面的SQL来创build第一个快照:

     create table sql_exec_before as select executions,hash_value from v$sqlarea / 
  2. 让用户在应用程序中执行他们的任务。

  3. 拿第二个快照。

     create table sql_exec_after as select executions, hash_value from v$sqlarea / 
  4. 检查结果现在已经捕获了SQL,现在可以查询结果了。

这第一个查询将列出已执行的所有查询散列:

 select aft.hash_value from sql_exec_after aft left outer join sql_exec_before bef on aft.hash_value = bef.hash_value where aft.executions > bef.executions or bef.executions is null; / 

这一个将显示散列和SQL本身:在散列值上设置页面999行100中断

 select hash_value, sql_text from v$sqltext where hash_value in ( select aft.hash_value from sql_exec_after aft left outer join sql_exec_before bef on aft.hash_value = bef.hash_value where aft.executions > bef.executions or bef.executions is null; ) order by hash_value, piece / 

5.清理完成后不要忘记删除快照表:

 drop table sql_exec_before / drop table sql_exec_after / 

Oracle与其他数据库一起分析给定的查询以创build执行计划。 这个计划是检索数据的最有效的方法。

Oracle提供了分析查询的“ explain plan ”语句,但不运行它,而是填充可以查询的特殊表(计划表)。

语法(简单的版本,还有其他选项,例如用特殊的ID标记计划表中的行,或者使用不同的计划表)是:

 explain plan for <sql query> 

对这些数据的分析还有另一个问题,或者您的进一步研究。

有一个商业工具FlexTracer可以用来跟踪Oracle SQL查询

这是一个Oracle文档,解释如何跟踪SQL查询,包括几个工具(SQL Trace和tkprof)

链接

显然没有一个简单便宜的工具可以帮助你完成这个任务。 然而,复杂和不方便的方法还有101种方法。

以下文章介绍了几个。 有可能有几十… http://www.petefinnigan.com/ramblings/how_to_set_trace.htm