是否有用于跟踪在Oracle上执行的SQL的工具

时间:2011-02-18 18:55:54

标签: oracle oracle11g

是否有用于跟踪已执行的SQL的工具(已经在Oracle中提供)?在DB2中,有一种称为“事件监视器”的东西,我用它来跟踪已更新的表。 Oracle中是否有同等的工具?

我打算

  • 启用跟踪
  • 进入网站(使用数据库)并更改条目
  • 禁用跟踪
  • 查看输出文件并记录哪些表已更新。

我正在寻找一个应该在更改条目时更新的表。我不知道表的名称是什么(并且有很多表),所以我需要跟踪执行的SQL以查找。

我试过了:

  ALTER SESSION SET sql_trace = true;
  -- go on website and change an entry
  ALTER SESSION SET sql_trace = false;

  tkprof the_trace_file.trc file.out EXPLAIN=system/manager SYS=no

但是,按照上述步骤操作时,没有记录任何SQL。

Oracle是否提供了一个工具? (我想避免下载外部软件)

5 个答案:

答案 0 :(得分:4)

  

我正在寻找一张桌子   应该在条目时更新   改变。我不知道这个名字是什么   表是(并且有很多   表),所以我需要追踪   执行SQL以查找。

我认为你在这里使用“trace”这个词的含义与Oracle世界通常所说的含义不同。

你基本上点击了应用程序中的某个按钮,通过查看正在运行的SQL查询,你想找到代码所引用的表格?我做对了吗? 在这种情况下,您可以查看v$sql,并查看SQL_TEXT和SQL_FULLTEXT列。

答案 1 :(得分:2)

ALTER SESSION命令在会话级别(即您当前的连接)工作。 该网站将使用不同的会话(可能来自连接池)。 您可以使用ALTER SYSTEM SET sql_trace = true;

为所有会话启用跟踪

答案 2 :(得分:2)

您在跟踪文件中没有得到任何内容的主要原因是您在启用了跟踪的会话中没有执行任何操作。

如果你已经完成了:

alter system set sql_trace = true;
-- fiddle around with the website
alter system set sql_trace = false;

您已经获得了一个或多个跟踪文件,每个会话一个,当您在摆弄网站时有活动。

问题在于,如果网站使用连接池,您的用户活动可能已经分散在多个连接中,并且可能与其他并发用户活动混合在一起。

答案 3 :(得分:1)

也许Oracle Audit会帮助您。

以下是一个很好的解释:http://www.oracle-base.com/articles/10g/Auditing_10gR2.php

您必须通过设置参数AUDIT_TRAIL来启用审核。

那是在服务器级别。您可以使用针对OCI的第三方sql跟踪器在客户端级别进行审核:

http://sourceforge.net/projects/ocimonitor/

答案 4 :(得分:1)

我发现企业管理器是最有用的工具。正如已经指出的那样,您必须更改网站正在使用的会话而不是您自己的会话。如果将连接池限制设置为1连接,则可以在企业管理器中轻松找到会话,然后打开跟踪。通常情况下,查找企业管理器中显示的顶级查询会告诉我哪些查询花费的时间太长而无需跟踪任何内容。