我先描述一下環境和問題
環境:服務器:IBM P570 AIX5.3 庫:oracle 10G
做的雙節點的rac 2層架構,c/s模式,客戶端直連數據庫,沒有中間件緩衝池,服務器模式爲專有模式(DEDICATED)。還有就是我們的用戶都是走的內網,不對外提供服務,因爲是醫院,客戶端都是醫生、護士用的。
問題描述:客戶端連接數據庫後,如果沒有任何操作10分鐘左右自己斷開連接。
1、數據庫:我看了oracle的profile,走的是default,
IDLE_TIME是unlimited,所以初步判斷不是庫的問題 (難道庫還有別的配置能限制?)
2、應用:諮詢了此應用專業人士,說應用沒有做過任何斷開的策略限制
3、網絡:我們的匯聚沒有做過這樣的策略
因爲排除了profile的原因,懷疑可能是服務器或者網絡的問題:
先說服務器:在網上找了很多的資料,主要是兩個地方可能會限制:
etc/profile配置文件的TMOUT參數 2、通過no -a|grep idle 查看tcp_keepidle 發現這兩個地方都沒問題的
網絡:雖然我不知道是哪裏有策略,但是我覺得可能就是網絡的問題,在哪個交換機上或者AIX小機上有策略,幹掉長時間空閒的網絡連接,提高網絡利用率的
最後在網上發帖子,找到了方法:利用oracle的DCD(Dead Connection Detection)機制,避免oracle會話被防火牆強制斷開
就是修改network/admin/sqlnet.ora文件
加入:sqlnet.expire_time = 5
這個參數的意思是 oracle每隔5分鐘會向所有oracle的客戶端發送一個10字節的空包,這樣這個鏈接就不是空閒的了,也就不會被防火牆策略幹掉了.
這個是當時我發的帖子:http://www.itpub.net/thread-1823581-3-1.html