如何通过用户名查找最近10个oracle查询?

jak*_*ake 10 sql oracle

不确定这是否可行.我10克.最终结果如下:

Username      | Date/Time            | sqltext 
jdoe          | 3/21/11 10:32:27     | select sum(total) from sales where in_date > '08-JAN-11' 
jdoe          | 3/21/11 10:32:21     | delete from products_old 
jdoe          | 3/21/11 10:32:18     | select item, description from products where item = 'blah' 
jdoe          | 3/21/11 10:32:06     | select count(item) from products 
jdoe          | 3/21/11 10:31:44     | describe products
Run Code Online (Sandbox Code Playgroud)

看起来v $ sql几乎(?)存储了所有已发送的sql查询,但我加入了什么来获取用户名和日期?

Jus*_*ave 6

如果你有企业版和性能和调优包(否则查询AWR表违反了你的许可证),V$ACTIVE_SESSION_HISTORY视图将是你得到的最接近的.这将每秒捕获每个活动会话正在执行的内容.如果您的用户每秒执行许多SQL语句,或者您的SQL语句足够快以至于它们在特定的第二个边界内不活动,则不会捕获每个查询.如果您只是尝试对特定用户已完成的最后10件事进行一般性抽样(偏向于捕获更长时间运行的查询),那么AWR应该足够了.但是,如果您尝试执行某些操作,例如跟踪用户在其会话中执行的操作,则AWR将不合适.

如果要捕获用户所做的一切,您需要跟踪会话.这将导致在服务器上生成相当庞大的跟踪文件,您可以使用该tkprof实用程序进行汇总.但这要求您在执行感兴趣的SQL之前启用特定会话的跟踪 - 这不是可以追溯执行的操作.

如果您只对会话所做的更改感兴趣,可以使用LogMiner浏览重做日志以查看用户正在执行的操作.这可以追溯完成,但由于SELECT语句不生成REDO,因此它们不会写入重做日志,并且对LogMiner不可见.