【问题标题】:View SQL History by User [Oracle]按用户查看 SQL 历史记录 [Oracle]
【发布时间】:2018-03-02 19:17:57
【问题描述】:

我正在尝试在我们的 Oracle 11g 数据库中按用户查找所有(可用)SQL 历史记录。我尝试使用诸如v$sql_monitorv$sqlareadba_hist_active_sess_history 之类的视图来尝试获取用户名及其执行的SQL 语句(加入SID 和序列号),但我没有任何运气。我们的高级 DBA 和 DBE 说他们以前做过,但只是告诉我查看 sqlarea,因为它拥有最长的 SQL 历史。我对此没有任何运气。这可以在 Oracle 中完成吗?

编辑:我们使用 SQL Developer。我知道 TOAD 可能会或可能不会内置此功能,但我无法在 SQL Developer 中找到任何可以实现此功能的东西(除了查看当前会话和当前 SQL)。

【问题讨论】:

  • 检查这个表 v$sql
  • 您到底想要什么 - 每个用户执行的每个 SQL 的列表?你永远找不到那个。
  • 您的 DBA 错误。 V$SQLSTATS 具有最长的保留时间,即使在游标已从共享池中老化后也是如此。

标签: oracle oracle11g


【解决方案1】:

如果您有适当的许可来查询 dba_hist_active_sess_history,您可以尝试类似的操作,您需要诊断包的许可:

select trunc(hist.sample_time,'DD'),u.name,hist.sql_id,sql.sql_text
from dba_hist_active_sess_history hist,
     dba_hist_sqltext sql,
     user$ u
where hist.sql_id = sql.sql_id
and   hist.user_id = u.user#;

【讨论】:

    【解决方案2】:

    我认为获取用户的确切 SQL 执行(我认为您的意思是会话?)的唯一方法是启用跟踪。 我认为这篇文章 (https://oracle-base.com/articles/misc/sql-trace-10046-trcsess-and-tkprof) 给你一个很好的指导如何使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多