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

为何昨日执行的SQL未在DBA_HIST_SQLTEXT中找到?如何追踪?

追踪未出现在DBA_HIST_SQLTEXT中的SQL语句
  • 先确认SQL是否仍在内存缓存中
    直接查询内存中的SQL视图V$SQL,如果SQL还没被共享池刷出,这里能找到记录:

    SELECT sql_text, sql_id FROM V$SQL WHERE sql_text LIKE '%你的查询关键词%';
    

    若V$SQL中也无结果,说明SQL已被清除,需用历史追踪手段。

  • 临时开启SQL Trace捕获执行过程
    若能重新执行目标SQL,可先给自己的会话开启Trace:

    ALTER SESSION SET SQL_TRACE = TRUE;
    

    执行目标SQL后关闭Trace:

    ALTER SESSION SET SQL_TRACE = FALSE;
    

    然后到服务器trace文件目录(通过SELECT value FROM V$PARAMETER WHERE name = 'user_dump_dest';查看路径)找到对应trace文件,用tkprof工具分析:

    tkprof trace_file.trc output.txt explain=用户名/密码
    
  • 检查并调整AWR快照设置
    DBA_HIST_SQLTEXT的数据来自AWR快照,若快照间隔过长或保留期不足,SQL可能未被捕获。先查看当前AWR配置:

    SELECT snap_interval, retention FROM DBA_HIST_WR_CONTROL;
    

    若需要更频繁的快照,可调整参数(需SYSDBA权限):

    EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(snap_interval => INTERVAL '30' MINUTE, retention => INTERVAL '7' DAY);
    
  • 借助ASH追踪会话历史
    ASH记录了近期会话活动,即使SQL不在AWR中,也可能在ASH里留下痕迹:

    SELECT sql_id, sql_text, sample_time
    FROM V$ACTIVE_SESSION_HISTORY
    WHERE sample_time BETWEEN TO_DATE('YYYY-MM-DD HH24:MI:SS', '你的查询开始时间') AND TO_DATE('YYYY-MM-DD HH24:MI:SS', '你的查询结束时间')
      AND sql_text LIKE '%你的查询关键词%';
    

    也可查询DBA_HIST_ACTIVE_SESS_HISTORY(ASH的历史快照),如果SQL在快照周期内执行过,可能存在于此。

  • 开启SQL审计长期追踪
    若需要持续监控特定SQL,可开启审计功能:

    AUDIT SELECT TABLE BY 目标用户名 BY ACCESS; -- 根据需求调整审计范围
    

    之后通过审计视图查看记录:

    SELECT sql_text, timestamp FROM DBA_AUDIT_TRAIL WHERE timestamp BETWEEN 时间范围 AND sql_text LIKE '%查询关键词%';
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:04:54