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

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

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

【问题讨论】:

    标签: oracle sql-update database-administration


    【解决方案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 才能获得日期。
      猜你喜欢
      • 2019-01-27
      • 2011-06-21
      • 2022-01-11
      • 2012-08-05
      • 1970-01-01
      • 2017-05-11
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多