2009-12-27 72 views
6

我們陷入了一種情況,即我們的某個進程需要3小時的計算而不觸及數據庫。調用進程之前所進行的連接被Oracle服務器關閉,任何後續查詢或提交都會引發連接關閉異常。Oracle中的IDLE超時參數

在我們看來,問題與Oracle關閉由於某種原因長時間閒置的連接有關。

我們嘗試更改sqlnet.ora中的EXPIRE_TIMEOUT,但這也沒有幫助。

我們可以做些什麼來解決這個問題?

+1

如果你沒有使用這麼長的時間連接,爲什麼不將其關閉並在需要時獲得新的連接?在這麼長的時間裏保持你不需要的資源是很浪費的。 – 2009-12-27 16:00:25

+0

調用進程的代碼是第三方代碼,不能做太多的事情。我從他們那裏聽到的是,我們需要增加連接超時,直到過程返回。 – 2009-12-27 17:42:27

回答

7

什麼是當您嘗試使用連接你的錯誤?

Oracle默認情況下不會因不活動而關閉連接。您可以使用IDLE_TIME配置配置文件,以使Oracle關閉不活動的連接,但聽起來並不像您所做的那樣。如果客戶端沒有響應,您也可以配置Oracle來檢測死連接並關閉連接 - 如果客戶端被埋沒了三個小時,可能沒有及時響應。但是,廣告似乎不太可能需要額外的配置步驟。

根據我的經驗,更可能的情況是您的網絡正在斷開連接。例如,如果您通過防火牆連接,防火牆會經常關閉閒置時間過長的連接。

您正在接收的實際Oracle錯誤消息將指示哪些替代方法導致您的問題。

0

無論您使用的數據庫是什麼數據庫,假設您的連接將在您希望使用時都處於活動狀態是一個壞主意。處理這種情況的一種方法是創建一個函數,將有效連接返回到有問題的數據庫,並在每次需要句柄/對象/給定數據庫的任何內容時調用它。該例程維護數據庫及其關聯連接對象的列表。如果在函數被調用的時候連接對象是活動的,那麼在函數做了一些事情之後返回對象來說服數據庫保持句柄/對象/任何打開的對象。如果沒有實時連接對象,例程會打開一個新連接對象並返回該連接對象。有一個第二個例程在一分鐘左右到期的定時器中駐留很有用。當計時器到期並調用第二個例程時,它會查看數據庫連接列表,查找在指定時間內沒有活動的數據(顯着小於數據庫的會話超時值)。那些長期不活動的人會被關閉並清理乾淨。

+0

感謝您的回覆,因爲您可以看到我對該問題的評論,我們正在使用的第三方代碼以及他們推薦的解決方案是我們提供了idletimeout參數。 – 2009-12-27 17:43:46

3

伊爾凡,

  1. 請確保您有RESOURCE_LIMIT =在init.ora文件中,以使更改生效TRUE。

  2. 此外,請檢查您嘗試設置限制的用戶是否已分配給默認配置文件。

select profile from dba_users where username = 'TEST_USER'; 
    PROFILE1 

選擇輪廓,RESOURCE_NAME,限制從DBA_PROFILES 其中 輪廓= 'PROFILE1' 和
RESOURCE_NAME = 'IDLE_TIME'

3如果用戶asigned到自定義配置文件確保自定義配置文件的參數是按照相應的方式設置的。您還應該查看connect_time參數(在默認情況下或者自定義配置文件中適用於您的情況,一旦超過連接時間,連接就會終止。)

最後請注意,如果當前會話開始之前該參數已設置,不會生效。進行更改後,更改僅在下一次會話中引入。

有用的鏈接。

http://www.adp-gmbh.ch/blog/2005/april/17.html 
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:453256655431 

感謝,

拉傑什

+0

init.ora沒有resource_limit變量,我認爲它的默認設置爲false。 那麼這是否意味着IDLE_TIME被設置爲其中resource_limit爲false的較小值。 OR是否設置爲UNLIMITED。 Beacuase如果它的默認情況下是無限的,我不需要做任何事情。想法 – 2009-12-27 19:47:08

+0

從文檔,似乎如果resource_limit設置爲flase(這是默認值),它會禁用資源限制的強制執行。我不確定這是否會給IDLE_TIME無限的時間。 當你執行 時,你會得到什麼?從dba_users選擇配置文件,其中username = ; ? – 2009-12-27 19:58:10

+0

如果要在此配置文件中省略此資源的限制,請指定DEFAULT。指定此配置文件的用戶受限於在DEFAULT配置文件中指定的此資源。 DEFAULT配置文件最初定義了無限資源。您可以使用ALTER PROFILE語句更改這些限制 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6010.htm#i2065930 – 2009-12-27 20:01:01

0

這似乎爲connection closed exception實際的原因是一樣的東西@Justin洞在他的回答中提到:

在我的經驗更可能的情況是,你的網絡是 放棄連接。如果通過防火牆進行連接,則對於 示例,防火牆會頻繁關閉已空閒太久的連接。

您收到的實際Oracle錯誤消息將指出哪些 這些替代方法導致您的問題。

如果仍然有人想知道IDLE_TIMECONNECT_TIME配置爲配置文件,那麼可以執行以下查詢:

select * from user_resource_limits user_resource where user_resource.resource_name in ('IDLE_TIME','CONNECT_TIME');