【问题标题】:Is there a tool for tracing SQLs executed on Oracle是否有跟踪在 Oracle 上执行的 SQL 的工具
【发布时间】:2011-06-30 01:03:10
【问题描述】:

是否有用于跟踪已执行 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 是否提供了工具? (我想避免下载外部软件)

【问题讨论】:

标签: oracle oracle11g


【解决方案1】:

也许 Oracle 审计会帮助您。

这里有一个很好的解释:http://www.oracle-base.com/articles/10g/Auditing_10gR2.php

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

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

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

【讨论】:

    【解决方案2】:

    我正在寻找一张桌子 条目时应更新 改变了。不知道叫什么名字 桌子是(而且有很多 表),所以我需要追踪 执行 SQL 以找出答案。

    我认为您在这里使用的“跟踪”一词的含义与 Oracle 世界中通常的含义不同。

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

    【讨论】:

    • 是的,你是绝对正确的。很抱歉造成混乱。感谢您的回答!这张表对我很有帮助。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您在跟踪文件中没有得到任何内容的主要原因是因为您在启用了跟踪的会话中没有做任何事情。

      如果你已经这样做了:

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

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

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

      【讨论】:

      • 哦,我明白了。我阅读的文档没有提到使用 system.谢谢!
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        相关资源
        最近更新 更多