0

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

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

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

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

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

使用 Oracle 10g 企业版

4

4 回答 4

3

我发现这适用于 AWS Oracle RDS 实例。我从连接到数据库的 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.=" $_";
  }
}'

希望对其他人有所帮助。

于 2016-06-16T09:51:10.557 回答
0

IIRC,TOAD 会做你想做的事。

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

还有其他有趣的下载(搜索 oracle free toad),但我不能确定它们的合法性。

于 2013-01-15T17:09:31.347 回答
0

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

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

如果你有一个中间层,那么事情会变得稍微复杂一些,但只是在弄清楚你需要跟踪的会话方面。不过,您始终可以启用系统范围的跟踪。

于 2013-01-16T01:23:06.727 回答
0

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

于 2014-06-24T15:23:40.813 回答