2011-03-21 63 views
10

不確定這是否可能。我在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

回答

6

如果您有企業版和性能和調整包(否則查詢AWR表違反了您的許可證),則V$ACTIVE_SESSION_HISTORY視圖將是您獲得的最接近的視圖。這將每秒捕獲每個活動會話正在執行的內容。如果您的用戶每秒執行多個SQL語句,或者您的SQL語句足夠快以至於它們在特定的第二個邊界內未處於活動狀態,則不會捕獲每個查詢。如果你只是想獲得的特定用戶已經完成(有偏向於捕捉較長的運行查詢)在過去的10件事一般的抽樣中,AWR應該足夠了。但是如果你想要做一些跟蹤用戶在會話中所做的事情,那麼AWR將不合適。

如果你想捕捉絕對一切用戶執行,則需要跟蹤會話。這將導致在服務器上生成一個相當龐大的跟蹤文件,您可以使用tkprof實用程序進行彙總。但是這要求您在執行感興趣的SQL之前啓用特定會話的跟蹤 - 這不是可追溯的。

如果你有興趣只在會議上所做的更改,你可以使用的LogMiner要經過重做日誌,看看有什麼用戶在做什麼。這可以追溯地完成,但由於SELECT語句不生成REDO,因此它們不會寫入重做日誌,並且LogMiner將不可見。

1

如果您使用JDBC,你可以隨時使用Log4jdbc wrapper library。它記錄了所有的jdbc活動 - 你猜對了 - log4j。

您可以配置一些事件類型的日誌級別,它顯示發出的SQL(與它們的值替換綁定變量)和定時信息。我用它所有的時間。