Oracle配置DCD避免會話被防火牆強制斷開

今天有客戶反饋應用測試鏈接Oracle數據庫的會話半小時左右未作操做就會被中斷,報錯ORA-3113,詢問數據庫是否有這樣的超時設置,可否取消掉這個限制?
登上環境查看監聽日誌發現鏈接的IP和數據庫IP不是同一網段,故詢問中間是否有防火牆設備,獲得確定的答覆後,再結合實際的現象,基本也就確認是因爲防火牆默認強制斷開一段時間內(這裏也就是半小時)都是空閒狀態的會話,而後會話再作操做時就會發現原鏈接已經被斷開,報錯ORA-3113,而後只能重連。
防火牆涉及其餘部門管理,協調比較麻煩。還好Oracle有DCD(Dead Connection Detection)這個功能特性,主要就是設置一個時間好比10分鐘,那麼每隔10分鐘Oracle就會發一個空包給鏈接會話的客戶端,防火牆發現會話變爲活躍就會從新計時,這樣也能夠間接解決這個問題。sql

配置DCD的方法很是簡單,就是在監聽對應的sqlnet.ora 配置文件中添加1行內容:數據庫

sqlnet.expire_time = 10

含義能夠從sample示例中找到說明:session

########################
#sqlnet.expire_time = 10
########################
#
#Possible values: 0-any valid positive integer! (in minutes)
#Default: 0 minutes
#Recommended value: 10 minutes
#
#Purpose: Indicates the time interval to send a probe to verify the
#         client session is alive (this is used to reclaim watseful
#         resources on a dead client)
#
#Supported since: v2.1

設置完成後要重啓監聽,或者reload監聽生效。測試

lsnrctl reload

但這隻對新的鏈接有效,對於已經存在的鏈接是沒做用的,針對這些鏈接必需要殺掉重連才能夠,或者乾脆等到他們碰到ORA-3113,再進行重連。this

在客戶反饋的數據庫均配置好DCD,reload監聽,通知客戶測試,告知新的鏈接纔有效。
最終通過客戶一下午的觀察,確認以前反饋的問題已經獲得解決。日誌

相關文章
相關標籤/搜索