不确定这是否可行。我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
看起来v $ sql几乎(?)存储了所有发送过的sql查询,但我加入了什么来获取用户名和日期?
答案 0 :(得分:6)
如果您拥有企业版和性能及调优包(否则查询AWR表会违反您的许可),V$ACTIVE_SESSION_HISTORY
视图将是您最接近的视图。这将每秒捕获每个活动会话正在执行的内容。如果您的用户每秒执行许多SQL语句,或者您的SQL语句足够快以至于它们在特定的第二个边界内不活动,则不会捕获每个查询。如果您只是尝试对特定用户已完成的最后10件事进行一般性抽样(偏向于捕获更长时间运行的查询),那么AWR应该足够了。但是,如果您正在尝试执行跟踪用户在会话中执行的操作,则AWR将不合适。
如果要捕获用户所做的一切,您需要跟踪会话。这将导致在服务器上生成相当庞大的跟踪文件,您可以使用tkprof
实用程序进行汇总。但这要求您在执行感兴趣的SQL之前启用特定会话的跟踪 - 这不是可以追溯执行的事情。
如果您只对会话所做的更改感兴趣,可以使用LogMiner浏览重做日志以查看用户正在执行的操作。这可以追溯完成,但由于SELECT语句不会生成REDO,因此它们不会写入重做日志,并且对LogMiner不可见。
答案 1 :(得分:1)
如果您使用的是JDBC,则始终可以使用Log4jdbc wrapper library。它将所有jdbc活动记录到 - 你猜对了 - log4j。
您可以为多种事件类型配置日志级别,它显示发出的sql(将绑定变量替换为其值)和计时信息。我一直都在使用它。