嗨,我正在学习 ASH 和 AWR 表,但是关于如何获取给定用户在过去 30 天内访问的 sql、对象和模式所有者的列表有什么想法吗?基本上获取所有 SQL 文本,然后在此 SQL 中搜索以查看给定模式是否访问给定对象(表、包、函数、视图等)以及由哪个用户访问?关于从哪里开始以及如何开始的任何想法建议?
问问题
21190 次
2 回答
1
您可以加入以下观点 -
- DBA_HIST_ACTIVE_SESS_HISTORY
- DBA_USERS
- 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
/
于 2015-01-29T05:39:14.997 回答
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 瘦客户端之类的任何名称,以识别查询是从哪个客户端触发的,但可选。
希望它会帮助并回答您的问题。谢谢 :)
于 2021-04-19T13:01:57.057 回答