Oracle 10g,查看发送到数据库的确切查询

时间:2013-01-15 16:56:13

标签: sql oracle10g trace enterprise

我有来自第三方的应用程序写入Oracle数据库。应用程序的一个组件不返回给定特定参数的数据,而应用程序的另一个组件确实返回具有相同参数的数据。没有人拥有此应用程序的源代码,但可以看出数据库中包含正确的信息。

行为不端的组件从oracle数据库服务器返回ORA-01403,这意味着没有找到数据,但可能与语法错误有关,正如我安装的数据包嗅探器所见。

我希望看到应用程序的不同组件实际生成的查询中的差异。

还想在命令行或其他一些数据库查看器中运行这些查询,以查看返回的内容。

如何使用实际显示正在进行的查询的跟踪来监控数据库?我还想通过IP地址或来源隔离它们。

使用Oracle 10g企业版

4 个答案:

答案 0 :(得分:2)

我发现这适用于AWS Oracle RDS实例。我从连接到db ...的linux实例运行tcpdump

tcpdump tcp port 1521 -s 0 -l -w -  | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
  if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {
    if (defined $q) { print "$q\n"; }
    $q=$_;
  } else {
    $_ =~ s/^[ \t]+//; $q.=" $_";
  }
}'

希望能帮助别人。

答案 1 :(得分:0)

IIRC,TOAD会做你想做的事。

此外,还有一项免费试用 - http://www.quest.com/toad-for-oracle/software-downloads.aspx

还有其他有趣的下载(搜索oracle免费蟾蜍),但我无法确定它们的合法性。

答案 2 :(得分:0)

如果您的客户端直接连接到没有任何中间层的数据库,那么您有两个非常简单的选项。

首先,使用v$session视图找出所需会话的ID,然后通过其哈希值在v$sql / v$sql_text中找到您的查询(您可以查看docs中每个的描述,或启用会话级sql跟踪(1) (2)并在纯文本跟踪文件中获取查询。

如果你有一个中间层,那么事情会变得稍微复杂一些,但只有在找出你需要跟踪的会话时才会这样。您始终可以启用系统范围的跟踪。

答案 3 :(得分:0)

派对有点晚了,但我遇到了这个问题,并且不想在数据库服务器上安装一次性的东西,我使用wireshark结束了;查询以明文形式发送,完全可读。