2011-02-18 36 views
2

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

我打算

  • 启用跟踪
  • 去网站上(即使用DB)和更改条目
  • 禁用跟踪
  • 看到输出文件和记录的表已经更新。

有一个表我看,应该更新条目更改时。我不知道表的名称是什么(并且有许多表),所以我需要跟踪执行的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 

但是按照上述这些步骤时,没有SQLS记录。

有没有Oracle提供的工具? (我想避免下载外部软件)

+0

重复? http://stackoverflow.com/questions/148648/oracle-is-there-a-tool-to-trace-queries-like-profiler-for-sql-server – PaulWaldman 2011-02-18 19:00:51

回答

4

有我期待的是,当条目是 改变 应该更新的表。我不知道表名是什么名字 (并且有很多 表),所以我需要跟踪 执行的SQL来查明。

我在想你在这里使用“跟踪”这个词,它的含义与Oracle世界中通常的含义不同。

您基本上在应用程序中点击某个按钮,并通过查看哪些SQL查询正在运行,您想要查找该代码引用的表是什么表?我是否正确?
在这种情况下,您可以查看v$sql,查看SQL_TEXT和SQL_FULLTEXT列。

+0

是的,你是绝对正确的。对此感到抱歉。感谢你的回答!这张桌子对我很有帮助。 – f20k 2011-02-18 19:40:27

2

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

2

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

如果你这样做:

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

你会已经得到了一个或多个跟踪文件,一个是其中有活性,而你正在与网站摆弄每个会话。

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

+0

哦,我明白了。我阅读的文档没有提到使用系统。谢谢! – f20k 2011-02-18 20:53:44

1

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

相关问题