2009-09-07 131 views
2

是否可以指定Oracle數據庫查詢的連接/查詢超時?在Oracle端還是在Oracle的JDBC驅動程序(10.2.0.4)中?那麼,那個Java客戶端剛剛收到了一個錯誤,比如說,等2分鐘,而不是等到Oracle完成執行查詢之後呢?Oracle連接/查詢超時

回答

4

如果您在事務上下文中執行查詢,則JTA事務監視器的事務超時值將成爲查詢超時的決定因素。這個配置依賴於一個應用服務器到另一個應用服務器。

在單個查詢級別(在沒有JTA事務監視器的情況下),setQueryTimeout方法可用於設置執行Statement/PreparedStatement/CallableStatement對象的超時時間。

更新

setQueryTimeout是不被依賴,但它的工作原理(ATLEAST從J2SE客戶端)。它通過JDBC驅動程序執行完整的Oracle數據庫服務器往返。然後,由數據庫決定停止執行查詢。不要依賴於時間關鍵型應用程序。

+1

我們遇到了JTA超時的問題,因爲它不影響正在運行的查詢。而我們在嘗試運行實際的WebLogic服務器殺長時間運行的連接,並創建另一個線程來殺死它,但它擊中的Java鎖在Oracle JDBC驅動程序從而導致兩個線程等待。隨着WebLogic試圖創建更多的殺手級線程並最終運行,問題變得更加嚴重。 – 2009-09-07 12:10:50

+0

約setQueryTimeout點似乎很intresting,我以前沒有actuallly想到這一點:)。我們並不關心setQueryTimeout是否需要一些時間來取消查詢,這裏主要的是結果:)。我將回到測試結果。 – 2009-09-07 12:13:57

+1

原因setQueryTimeout()可能無法在WLS工作,是因爲JTA的更是這樣。我不認爲驅動程序會在事務上下文中響應setQueryTimeout調用,但我可能不正確。 – 2009-09-07 15:02:01

2

查看Oracle配置文件。這使您可以在數據庫級別指定多個限制。其中之一是每個查詢的最大CPU時間。

如果您的查詢定期運行超過2分鐘,則可能需要先對查詢進行一些調整。

+0

Oracle配置文件會影響用戶的所有查詢。 OP可能只對一個需要取消的特定查詢感興趣。 – 2009-09-07 14:56:15

+1

但是,這將作爲一個蠻力解決方案;-) – 2009-09-07 15:02:45

+0

如果setQueryTimeout不起作用,Oracle配置文件將成爲我們的下一步。 – 2009-09-08 10:40:02