DBA_HIST_ACTIVE_SESS_HISTORY 按用户和对象模式获取sql

问题描述 投票:0回答:2

您好,我正在学习 ASH 和 AWR 表,但是对于如何获取给定用户在过去 30 天内访问的 sql、对象和模式所有者的列表有什么想法吗?基本上获取所有 SQL 文本,然后在该 SQL 中搜索以查看给定对象(表、包、函数、视图等)是否为给定模式以及由哪个用户访问?关于从哪里以及如何开始有什么想法建议吗?

oracle-database oracle11g awr
2个回答
1
投票

您可以加入以下观点 -

  1. DBA_HIST_ACTIVE_SESS_HISTORY
  2. DBA_USERS
  3. DBA_HIST_SQLTEXT

要过滤过去 30 天的历史记录,请使用

sample_time
视图中的
DBA_HIST_ACTIVE_SESS_HISTORY

类似-

SELECT
   h.sample_time,
   u.username,
   h.program,
   h.module,
   s.sql_text
FROM
   DBA_HIST_ACTIVE_SESS_HISTORY h,
   DBA_USERS u,
   DBA_HIST_SQLTEXT s
WHERE  sample_time >= SYSDATE - 30
   AND h.user_id=u.user_id
   AND h.sql_id = s.sql_iD
ORDER BY h.sample_time
/

-1
投票

使用以下查询获取相关数据的最佳和最简单的方法。

 SELECT H.SAMPLE_TIME,
         U.USERNAME,
         H.PROGRAM,
         H.MODULE,
         S.SQL_TEXT,
         H.SQL_ID,
         H.TOP_LEVEL_SQL_ID,
         H.BLOCKING_SESSION_STATUS
    FROM DBA_HIST_ACTIVE_SESS_HISTORY H, DBA_USERS U, DBA_HIST_SQLTEXT S
   WHERE     H.SAMPLE_TIME >= SYSDATE - 30
         AND H.SQL_ID = S.SQL_ID 
  AND H.PROGRAM IN ('Toad.exe', 'SQL Developer')
 AND U.USERNAME ='YOUR_USERNAME'
ORDER BY H.SAMPLE_TIME DESC

在上面的代码中,您还可以根据您的要求获取数据,如下所示。

1。自定义用户数据: 只需将 YOUR_USERNAME 修改为您的真实用户名即可。

2。程序: 程序名称可以是 SQL Developer 或 JDBC Thin client 之类的任何名称,用于标识从哪个客户端触发查询,但可选。

希望对您有所帮助并解答您的问题。谢谢:)

© www.soinside.com 2019 - 2024. All rights reserved.