同事遇到的問題,某台Web接連數天無人使用,再連上時會遇到以下錯誤,IISRest後可恢復正常:

Oracle.DataAccess.Client.OracleException: ORA-02396: exceeded maximum idle time, please connect again

這問題應源於Connection Pool中某條Connection已斷線,卻被誤認可用被重覆使用所導致。Google一下,發現不少討論,說可以在ODP.NET的Connection String加上Validate Connection=true克服。但在官方說明上,每每提及,都會加註它會導致每次由Pool取用Connection時額外的資料傳輸,可能減低效能。(過度強調讓人頗有"醜話說在前面"的不安感,用起來應該心裡也會毛毛的吧? 呵)

不過,我衍生出另一個問題。過去我們在很多專案上都用了ODP.NET,從沒加入過Validate Connection參數,測試機數天不用也是家常便飯,何以不曾遇過該問題?  進一步分析,發現同事連的是一台新裝的測試Oracle,我們過去未曾用過。莫非是這台新DB Server的特殊設定所致?

問了DBA,謎底揭曉: 原來為了避免測試DB上養了一堆佔著茅坑不拉屎的連線,DBA在這台新DB的User Profile中設定了Session Idle Time > 1440 mins(24小時)強制斷線的設定。

DBA的回答解釋了為什麼這個"連新DB"的Web Application"好幾天沒用"(超過24小時)時才會出錯,解開了所有的謎團,這個迷你茶包的鬧場就此結束。


Comments

# by laneser

我比較好奇的是, 一般 ASP.NET 不是預設都會有回收時間嗎? 難道你們都把這個設定弄得很長或是直接幹掉?

# by Jeffrey

to laneser, 好問題,我原本沒想到這個。後來打聽,出問題的機器是Windows 2000,沒記錯的話,Wroker Process Recycling應是IIS 6.0起才內建的功能。

Post a comment