2016-12-27 74 views
0

我有這個Java應用程序仍然通過JDBC代碼與Oracle 11g進行通信。據說,如果已經存在,想檢查這個應用程序對Oracle歷史記錄的查詢。Oracle查詢歷史

關鍵項目看

  1. 全面查詢(用參數值(解析,而不是?),通過java.sql.PreparedStatement通過)
  2. 查詢
  3. 架構使用
  4. 的時間
  5. 用戶發起查詢

預期結果:

  • SQL查詢通過SQL Developer中運行(與SYSDBA權限或沒有)與密鑰的所有關鍵項目使用下面的查詢返回

嘗試,但它不返回上面列出的關鍵項目:

select * from v$sql order by last_load_time desc 
+0

看在V $ SQL_BIND_CAPTURE信息,和V $ SQLAREA – OldProgrammer

+0

你可以查詢oracle的歷史視圖。查詢v $ active_session_history:這需要大約1個數據。對於更長時間的數據查詢dba_hist_active_sess_history。 sql文本在dba_hist_sql_text上。對於綁定變量,dba_hist_sqlbind也會有所幫助。 –

+0

任何快捷方式?或確切的查詢來看看? –

回答

0

其他成員ha我們已經指出,V$SQL,V$SQL_BIND_CAPTUREV$SQLAREA應該會給你提供很多Java應用程序所發射查詢的信息。

請注意,它可能不是完整的年代史。假設Java應用程序對數據庫進行大量查詢,有可能並非所有查詢都存在於V $ SQL中(例如:解析失敗的查詢,僅用於一次不再處於緩存中的查詢等)可能會丟失出)。此外,如果查詢被激發兩次(具有相同或不同的一組綁定變量),您將只能找到最新的執行條目V$SQL

如果您的目標是以完美的時間順序查找所有查詢(如某種黑色然後我建議您啓用特定會話的跟蹤(由SID, SERIAL#V$SESSION中標識)。這將提供多個方面的信息,包括查詢火災順序,綁定變量,查詢性能等。請參閱this鏈接以獲取更多信息。可以完成不同類型和級別的信息收集。此外,它的性能開銷,請考慮因素,如果你打算使用它在任何生產系統下面

+0

感謝您的信息,但沒有想到會有多複雜的事情。但不能接受這個答案,因爲它沒有足夠的內容**期望結果** –

+0

沒有問題,很高興如果這個信息可以指出你在正確的方向或幫助解決你的問題。我的意圖是指出,V $ SQL可能不包含您正在尋找的所有答案。 –

0

查詢應返回你需要

select vsql.sql_text, vses.SCHEMANAME, vsql.ELAPSED_TIME, vses.USERNAME 
    from v$session vses join v$sql vsql 
    on vses.sql_id=vsql.sql_id 
    where contdition; 
+0

不滿足項目#1,不返回完整的SQL語句。不能使用'SQL_FULLTEXT'列,因爲它不會轉換通過'java.sql.PreparedStatement'傳遞的參數來處理'java.sql.ResultSet'。 –

+0

此外,您是否可以在上面的SQL查詢中列出要列入的關鍵項目,並指出要放置在「condition」上的參數。 –