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

问题描述:

不确定这是否可能。我在10g。最终的结果是这样的:(?)如何通过用户名查找最后10个oracle查询?

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 

它看起来像V $ SQL存储的几乎所有以往发出的SQL查询,但我该怎么加盟,为了得到一个用户名和日期?

+1

V $ SESSION维护用户名。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2088.htm – ukhardy 2011-03-21 20:51:51

如果您有企业版和性能和调整包(否则查询AWR表违反了您的许可证),则V$ACTIVE_SESSION_HISTORY视图将是您获得的最接近的视图。这将每秒捕获每个活动会话正在执行的内容。如果您的用户每秒执行多个SQL语句,或者您的SQL语句足够快以至于它们在特定的第二个边界内未处于活动状态,则不会捕获每个查询。如果你只是想获得的特定用户已经完成(有偏向于捕捉较长的运行查询)在过去的10件事一般的抽样中,AWR应该足够了。但是如果你想要做一些跟踪用户在会话中所做的事情,那么AWR将不合适。

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

如果你有兴趣只在会议上所做的更改,你可以使用的LogMiner要经过重做日志,看看有什么用户在做什么。这可以追溯地完成,但由于SELECT语句不生成REDO,因此它们不会写入重做日志,并且LogMiner将不可见。

如果您使用JDBC,你可以随时使用Log4jdbc wrapper library。它记录了所有的jdbc活动 - 你猜对了 - log4j。

您可以配置一些事件类型的日志级别,它显示发出的SQL(与它们的值替换绑定变量)和定时信息。我用它所有的时间。