You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看连接Oracle的Java黑盒所执行的SQL/PLSQL?AWR可行吗?

可以通过AWR查看黑盒Java代码执行的SQL/PLSQL内容

*AWR(Automatic Workload Repository)*会自动捕获数据库中资源消耗较高或执行次数较多的SQL语句及PL/SQL调用信息,只要你的Java代码执行的SQL/PLSQL满足AWR的采样条件,就能通过AWR获取到具体执行内容。以下是具体操作步骤:

一、生成AWR报告(支持命令行/图形化方式)

1. 命令行方式(服务器端操作)

  • 登录Oracle数据库服务器,使用sqlplus以DBA权限用户(如sys)登录:
    sqlplus / as sysdba
    
  • 执行AWR报告生成脚本:
    @?/rdbms/admin/awrrpt.sql
    
  • 按提示选择报告格式(HTML/TEXT),指定要分析的快照时间范围(需输入起始、结束快照ID,可通过DBA_HIST_SNAPSHOT视图查询快照列表)。

2. 图形化方式(Oracle Enterprise Manager,OEM)

  • 登录OEM控制台,导航至性能 -> AWR报告,选择目标数据库,指定时间范围后生成报告即可。

二、在AWR报告中定位目标SQL/PLSQL

生成报告后,重点查看以下核心板块:

  • Top SQL Statements:按CPU、逻辑读等资源消耗排序的SQL列表,找到与Java代码执行时间匹配的条目,查看完整SQL文本(若为PL/SQL,会显示调用的存储过程/函数名,甚至完整块内容)。
  • SQL Details:单条SQL的详细信息,包含执行计划、绑定变量值(若AWR已捕获)。
  • PL/SQL Statistics:若执行的是PL/SQL块,这里会列出执行过的存储过程、函数及其调用次数、资源消耗数据。

三、直接查询AWR视图(精准定位)

若无需完整报告,可直接查询AWR底层视图获取目标内容:

  • 查询指定时间范围内的SQL文本:
    SELECT sql_id, sql_text, executions_total, cpu_time_total
    FROM dba_hist_sqltext t
    JOIN dba_hist_sqlstat s ON t.sql_id = s.sql_id
    WHERE s.snap_id BETWEEN &start_snap AND &end_snap
    ORDER BY cpu_time_total DESC;
    
    替换&start_snap和&end_snap为实际快照ID,按资源消耗排序后,优先级最高的SQL大概率是Java代码执行的内容。
  • 查询PL/SQL执行信息:
    SELECT plsql_name, executions_total, cpu_time_total
    FROM dba_hist_plsql_stat
    WHERE snap_id BETWEEN &start_snap AND &end_snap
    ORDER BY cpu_time_total DESC;
    

注意事项

  • AWR默认采样周期为1小时,快照保留时间为8天;若Java代码执行的SQL/PLSQL资源消耗极低,可能无法被AWR捕获,此时可考虑开启SQL Trace或使用ASH(Active Session History)补充排查。
  • 操作需具备SELECT_CATALOG_ROLE或DBA权限。

内容的提问来源于stack exchange,提问作者mikcutu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:16:15