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


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

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

sqlnet.expire_time = 10

含義可以從sample示例中找到說明:

########################
#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,再進行重連。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM