You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Oracle SQL Developer中查看应用发送的SQL语句历史?

好问题!Oracle SQL Developer本身默认是看不到外部应用(比如你用ASP.Net + Oracle.DataAccess.dll连接数据库的那种)发送的SQL语句历史的——因为它只默认记录自己客户端窗口里执行的SQL。不过别担心,有几种办法可以实现类似需求,甚至能拿到原始格式的SQL:

可行的解决方案
  • 开启SQL Trace捕获会话SQL
    这是最直接能拿到原始SQL的方式,你可以针对应用程序对应的数据库会话开启SQL Trace,它会把该会话执行的所有SQL(包括应用发送的原始文本,带绑定变量的话还能抓到实际的绑定值)记录到跟踪文件里。在SQL Developer里操作的话:

    1. 先找到应用对应的会话:打开SQL Developer的「DBA」面板(需要DBA权限),展开「会话」,根据用户名、机器名或者程序名找到应用的数据库会话。
    2. 右键选中该会话,选择「启动SQL Trace」,或者直接执行命令:ALTER SESSION SET SQL_TRACE = TRUE;(如果能直接操作该会话的话)。
    3. 让应用执行你要跟踪的操作后,停止Trace,然后找到对应的跟踪文件(可以用SELECT value FROM v$parameter WHERE name = 'user_dump_dest';查询文件路径)。你可以用SQL Developer自带的TKPROF工具分析,或者直接打开跟踪文件查看原始SQL文本。
  • 查看AWR中的SQL历史
    如果你的数据库开启了自动工作负载仓库(AWR),可以在SQL Developer里生成AWR报告,里面会包含近期数据库执行的所有SQL语句(包括应用发送的)。操作步骤:

    1. 打开「DBA」面板,展开「性能」->「AWR」。
    2. 选择要查询的时间段,点击「生成报告」,在报告里找到「SQL Statistics」板块,就能看到执行过的SQL文本,还能附带执行次数、响应时间等统计信息。不过这个是历史统计数据,不是实时的,而且需要DBA权限才能访问。
  • 用SQL Monitor实时跟踪长耗时SQL
    如果你的应用执行的是耗时较长的SQL,你可以在SQL Developer的「性能」面板里打开「SQL Monitor」,它会实时显示正在执行的SQL语句,包括应用发送的内容。不过这个功能要求数据库是Enterprise Edition,而且SQL执行时间超过默认阈值(5秒)才会被捕获。

补充一句:如果你的应用使用了绑定变量,捕获到的SQL会是带:xxx占位符的形式,但SQL Trace文件里会记录绑定变量的实际值,完全可以还原出完整的执行逻辑。

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

火山引擎 最新活动