我正在尝试在 Oracle 11g 数据库中按用户查找所有(可用)SQL 历史记录。我尝试使用一些视图,例如
v$sql_monitor
、v$sqlarea
和 dba_hist_active_sess_history
来尝试获取用户名及其执行的 SQL 语句(在 SID 和 Serial # 上连接),但我没有任何运气。我们的高级 DBA 和 DBE 说他们以前做过,但只是告诉我查看 sqlarea,因为它拥有最长的 SQL 历史。我对此没有任何运气。在 Oracle 中可以这样做吗?
编辑:我们使用 SQL Developer。我知道 TOAD 可能内置也可能没有此功能,但我在 SQL Developer 中找不到任何可以实现此功能的内容(除了查看当前会话和当前 SQL)。
如果您有适当的许可来查询 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#;
我认为获取用户的确切 SQL 执行(我认为你的意思是会话?)的唯一方法是启用跟踪。 我认为这篇文章(https://oracle-base.com/articles/misc/sql-trace-10046-trcsess-and-tkprof)为您提供了如何使用它的良好说明。