如何跟踪从应用服务器提交到 Oracle DB 的所有查询? [复制]

Posted

技术标签:

【中文标题】如何跟踪从应用服务器提交到 Oracle DB 的所有查询? [复制]【英文标题】:How to track all queries submitted to Oracle DB from app server? [duplicate] 【发布时间】:2011-11-25 05:48:41 【问题描述】:

可能重复:Oracle: is there a tool to trace queries, like Profiler for sql server?

我正在使用 JDBC 与 Oracle 通信。是否有任何方法或外部工具可以跟踪在一个会话期间从应用服务器提交到 Oracle DB 服务器的所有 SQL 查询?这应该是非常棒的调试/错误跟踪工具。

【问题讨论】:

致 casperOne:你为什么认为这是完全重复。我只是无法理解。我的问题主要集中在如何跟踪客户端提交的所有 SQL 查询。所以我想要一个明确的时间段内的 SQL 查询列表。但是你指出这个问题的链接是重复的,主要集中在如何获取查询计划或特定查询。 【参考方案1】:

您可以使用JDBC (Enabling and Using JDBC Logging) 日志功能。

【讨论】:

【参考方案2】:

你可以试试JProfiler。它的 JDBC 探针在事件视图中显示所有 SQL 语句:

它适用于所有 JDBC 驱动程序,包括 Oracle 的。此外,探针的热点视图有助于确定哪些查询占用了大部分时间。

免责声明:我公司开发JProfiler

【讨论】:

太好了,谢谢您和您的团队,我需要购买此软件的许可证吗? @user872501 如果您想在评估期后继续使用它,则必须购买许可证。 我刚试过这个......你看不到实际传递的参数,你可以吗?我想查看所有正在运行的实际查询。 @MattBroekhuis 打开会话设置,进入“JEE & Probes”部分,选择 JDBC 探针并选择“Resolve parameters of Prepared statements”。【参考方案3】:

试试这个http://code.google.com/p/log4jdbc/

【讨论】:

谢谢,看看这个工具好像需要嵌入到应用程序代码中,你有没有完全脱离应用程序框的工具 @user872501 不,我不知道。您可以考虑 AVD 的建议,看看它是否符合您的需求【参考方案4】:

您可以检查 V$SQLAREA 视图以查看连接发送到服务器的所有内容:

select sql_fulltext,
       executions,
       buffer_gets,
       rows_processed,
       elapsed_time,
       first_load_time,
       last_active_time
from v$sqlarea 
where parsing_schema_name = 'YOUR_DB_USERNAME'

该视图还包含有关语句执行频率的信息以及可能有助于跟踪性能问题的其他有趣信息。

请注意,这些信息基本上是一个缓存 - 因此在一个非常繁忙的系统中,语句可能会从全局区域中清除(这意味着您有可能没有真正看到 所有 语句)

【讨论】:

以上是关于如何跟踪从应用服务器提交到 Oracle DB 的所有查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从Oracle 迁移到 Mongo DB

特定表的 Oracle 11g 审计跟踪

如何使用 SQL Plus 从 DB 用户获取日志信息?

调试/跟踪嵌入式 sql

oracle如何启用审计

【高分求助】连接服务器Oracle 11g数据库较慢