2011-02-18 77 views
2

是否有工具(已與Oracle一起提供)用於跟蹤已執行的SQL?在DB2中有一種叫做「事件監視器」的東西,我用它來跟蹤已經更新的表。 Oracle中是否有等效的工具?是否有工具用於跟蹤在Oracle上執行的SQL

我打算

  • 啓用跟蹤
  • 去網站上(即使用DB)和更改條目
  • 禁用跟蹤
  • 看到輸出文件和記錄的表已經更新。

有一個表我看,應該更新條目更改時。我不知道表的名稱是什麼(並且有許多表),所以我需要跟蹤執行的SQL以查找。

我曾嘗試:

ALTER SESSION SET sql_trace = true; 
    -- go on website and change an entry 
    ALTER SESSION SET sql_trace = false; 

    tkprof the_trace_file.trc file.out EXPLAIN=system/manager SYS=no 

但是按照上述這些步驟時,沒有SQLS記錄。

有沒有Oracle提供的工具? (我想避免下載外部軟件)

+0

重複? http://stackoverflow.com/questions/148648/oracle-is-there-a-tool-to-trace-queries-like-profiler-for-sql-server – PaulWaldman 2011-02-18 19:00:51

回答

4

有我期待的是,當條目是 改變 應該更新的表。我不知道表名是什麼名字 (並且有很多 表),所以我需要跟蹤 執行的SQL來查明。

我在想你在這裏使用「跟蹤」這個詞,它的含義與Oracle世界中通常的含義不同。

您基本上在應用程序中點擊某個按鈕,並通過查看哪些SQL查詢正在運行,您想要查找該代碼引用的表是什麼表?我是否正確?
在這種情況下,您可以查看v$sql,查看SQL_TEXT和SQL_FULLTEXT列。

+0

是的,你是絕對正確的。對此感到抱歉。感謝你的回答!這張桌子對我很有幫助。 – f20k 2011-02-18 19:40:27

2

ALTER SESSION命令在會話級別(即當前連接)下工作。 網站將使用不同的會話(可能來自連接池)。 您可以使用ALTER SYSTEM SET爲所有會話啓用跟蹤sql_trace = true;

2

您沒有在跟蹤文件中獲取任何內容的主要原因是因爲您在啓用跟蹤的會話中沒有執行任何操作。

如果你這樣做:

alter system set sql_trace = true; 
-- fiddle around with the website 
alter system set sql_trace = false; 

你會已經得到了一個或多個跟蹤文件,一個是其中有活性,而你正在與網站擺弄每個會話。

問題是,如果網站使用連接池,您的用戶活動可能已經分散到多個連接,並且可能與其他併發用戶活動混合在一起。

+0

哦,我明白了。我閱讀的文檔沒有提到使用系統。謝謝! – f20k 2011-02-18 20:53:44

1

我發現企業管理器是最有用的工具。如前所述,您必須更改網站正在使用的會話,而不是您自己的會話。如果將連接池限制設置爲1連接,則可以在企業管理器中輕鬆找到會話,然後打開跟蹤。通常情況下,查找企業管理器中顯示的頂級查詢會告訴我哪些查詢花費的時間太長而無需跟蹤任何內容。

相關問題