找出 SQL 查询的历史

Posted

技术标签:

【中文标题】找出 SQL 查询的历史【英文标题】:Find out the history of SQL queries 【发布时间】:2013-01-27 15:51:10 【问题描述】:

在服务器上执行了更新SQL查询,导致后来出现很多问题。

如何获取最近 2 个月执行的更新查询列表,以便准确跟踪有问题的 SQL 查询?

【问题讨论】:

【参考方案1】:

您可以使用此 sql 语句来获取任何日期的历史记录:

SELECT * FROM V$SQL V where  to_date(v.FIRST_LOAD_TIME,'YYYY-MM-DD hh24:mi:ss') > sysdate - 60

【讨论】:

【参考方案2】:

对于最近的 SQL:

select * from v$sql

历史记录:

select * from dba_hist_sqltext

【讨论】:

有没有办法用日期查找历史记录? select * from v$sql order by LAST_ACTIVE_TIME【参考方案3】:
    select v.SQL_TEXT,
           v.PARSING_SCHEMA_NAME,
           v.FIRST_LOAD_TIME,
           v.DISK_READS,
           v.ROWS_PROCESSED,
           v.ELAPSED_TIME,
           v.service
      from v$sql v
where to_date(v.FIRST_LOAD_TIME,'YYYY-MM-DD hh24:mi:ss')>ADD_MONTHS(trunc(sysdate,'MM'),-2)

where 子句是可选的。可以按照FIRST_LOAD_TIME对结果进行排序,查找到2个月前的记录。

【讨论】:

许多查询将在 shared_pool 中过期。 V$SQL 可能不会有过去 2 个月的所有查询。 我最近偶然发现了这个问题,@JonHeller 是正确的。 v$sql 没有及时回溯。但是,有一个名为dba_hist_sqlstat 的视图可能包含您需要的信息。您需要加入 snap_iddba_hist_snapshot 才能获得日期。

以上是关于找出 SQL 查询的历史的主要内容,如果未能解决你的问题,请参考以下文章

列出 DB2 Warehouse on Cloud 中的 SQL 语句历史记录

oracle执行历史查不到执行sql

用于显示查询历史的 SQL 命令

oracle查看历史session

sql 在MSSQL查询历史记录中搜索查询

递归sql查询获取更改历史