熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

都是防火牆惹的禍--Oracle連接總是斷

2013-11-13 22:12:59  來源: Oracle 

  忙乎了將近兩周終於搞定了從一開始懷疑是網絡的問題後來覺得不是可能是應用的問題發現很可能是數據庫的問題最後真相大白又回到原點原來是網絡防火牆在搗鬼行為非常詭異怎麼想也想不明白我都沒多少信心准備放棄了沒想到原因竟然如此簡單
  
  事情是這樣的我們開發的系統需要保持和Oracle數據庫的持續連接如果因為網絡或者其它原因非正常斷開的話必須重新啟動應用程序否則將會出錯無法使用在測試環境運行很穩定一搬到機房機架上就出現奇怪的現象第二天早上來看服務器所有的數據庫連接都斷掉了有時候白天也斷而且一個應用斷的次數特別頻繁其它應用白天不怎麼斷因為我們的應用服務器網段是xx而數據庫服務器在xxx網段剛開始我懷疑是中間的路由器有這種問題如果網絡持續一段時間沒有流量自動把網絡斷開並且和網管說了這事他說不可能有這種問題因為我們以前做過另外一個系統也存在這種問題好像是這個原因不過後來怎麼解決的不是很清楚了找知情人士了解後原來是數據庫網卡的原因從應用服務器ping數據庫服務器一個晚上有幾次丟包現象換數據庫服務器網卡就沒事了
  
  於是我們用ping t serverIP > pingtxt 來檢查網絡是否有丟包現象持續幾個晚上都沒有一次丟包的網絡狀況非常好我檢查網卡屬性的電源屬性卡上有一個復選框是否允許計算機閒置時關閉該設備默認是選中的於是我懷疑是網卡被計算機關掉了於是所有連接均斷開了但是白天之斷開一個解釋不同啊應用程序有問題?為什麼測試環境中沒發現問題?有可能是某一塊數據有問題他們測試時亂調圖碰到雷區了於是我檢查所有的數據沒有那種問題真是讓人費解而且我持續ping網卡也不可能被關閉的啊
  
  有可能是某個端口關閉了於是我們寫了一個小程序打開一個數據庫連接每隔一定時間查一下數據庫保持端口是打開的問題依舊存在這個小程序的連接沒斷其它的全斷了
  
  是什麼原因呢?其實現在想起來問題已經很明朗了但是當時就是不明白怎麼回事而且那天老是打電話過來連接又斷了上午斷兩次下午又斷了兩次一整天我們都沒想出什麼好辦法怎麼會這麼變態為什麼會只斷掉一個?我當時懷疑是我們應用程序有點問題在絞盡腦汁想辦法怎麼檢測應用程序的錯誤
  
  為了檢測斷開的規律我寫了兩個觸發器用戶登陸時網一個表中插入一條記錄注銷是把注銷時間填入表中後來發現根本一點用也沒有非正常退出時根本不會觸發LOGOFF事件白忙乎了!
  
  下班了騎車回家突然想到一個辦法定時激活連接保持活動狀態看它還斷不斷很多好的想法都是在我離開辦公室回家的路上想出來了在辦公室怎麼想也想不出來離開辦公室就想出了第二天馬上行動果真有效連接沒有再斷過但是這樣不是個辦法為什麼連接一段時間不活動就會被殺掉了呢?在我們的應用程序中看不到原因只是說連接丟失在sqlplus中提示說endoffile communication channel
  
  今天一整天我都在網上狂找相關內容oracle connection lost oracle session lostoracle session timeout等等看到也有人碰到類似我這種情況的人但是沒有好的辦法我把Oracle net service得文檔翻了一遍看到sqlnetora有一個關於超時的參數SQLNETEXPIRE_TIME簡直如獲至寶後來發現原來沒用服務器端自動殺掉客戶端進程的情況還可以通過Profile來實現限制IDLE_TIME但是我檢查數據庫根本沒有相關的設置
  
  好不容易找到一溜很長的帖子也是關於我這種問題的最後他說解決了是防火牆的問題但是以前我印象中防火牆只是針對端口的怎麼會保持某些活動連接殺掉不活動的連接呢?後來我去網上查了查防火前的有關原理好象它能處理到TCP/IP連接一級也就是可以只斷開某一個不活動的連接但我還是不很確定但是我知道在數據庫服務器和應用服務器之間有防火牆把機器搬過去的那天能ping通數據庫服務器但是不能連數據庫後來網管把Oracle數據庫的兩個端口打開就可以了
  
  我們找到網管他說是有這種問題防火牆就是這樣的如果一個連接長時間不活動就會自動殺掉的如果不這樣的話防火牆的內存很快會用完還說我們違背了TCP/IP的設計原則但是沒辦法我們的應用程序需要持續而穩定數據庫連接只能把我們的應用服務器放到防火牆後面去於是他把我們的服務器跳了線變成一個網段的從此不再有連接斷開的問題了終於徹底解決這個問題長舒一口氣!!!
  
  其實主要原因還是網絡規劃有問題怎麼能把我們應用服務器和數據庫服務器隔開呢?
From:http://tw.wingwit.com/Article/program/Oracle/201311/18502.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.