第二次遇到,近年因孟婆湯飲用過量,花了點時間才回憶起,特PO文備忘。

ASP.NET網站伺服器遷移後,查詢Oracle資料庫時偶爾會出現"ORA-12571: TNS:封包寫入器失敗(TNS:packet writer failure)",但重新整理網頁後則又正常。

Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlVarCtx* pOpoSqlVarCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requrey, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleCommand.

經爬文發現此錯誤多屬網路傳輸層次問題,多因網路品質、傳輸設備、防火牆... 等因素導致與Oracle伺服器網路連線發生中斷引起。而新近ASP.NET伺服器環境的主要變動是納入負載平衡設備(Load Balancer, NLB)管轄,因此與Oracle資料庫的連線預設也會經過NLB設備,有可能是造成問題的原因。

試著將伺服器移出NLB,問題就消失了;配合網管人員由NLB觀察,確認NLB的Session管理機制會導致Oracle連線Session中斷(但SQL Server的連線則不會)。將Oracle連線排除在NLB管理範圍外,問題排除!


Comments

# by 仙草

請問黑暗大~ 小弟這邊也遇到這個問題, 可是我們公司必須要有兩台以上的Web Servers一起服務, 不能移出NLB說 您是否有建議的解決方案呢, 我們公司是用F5 BIG-IP 1600 謝謝!

# by Jeffrey

to 仙草, (炎炎夏日回覆你的留言有股特別的清涼感, 名字取得好!) 網管設備不在我的守備範圍,不確定你說的F5機型能否單獨把Web對Oracle的Session排除在NLB之外(外部對Web仍用NLB)? 不過,就算設定上無法分割,若預算允許,在Web上加一張網卡,讓Web走另非NLB網段去連Oracle,應該也是個不錯的解決方案。

# by 仙草

黑暗大真是充滿智慧,加張網卡的方法應該可行,您真厲害! 希望我可以早點把掩蓋這個問題用的「系統忙碌中」訊息給處理掉,哈哈 感謝~

# by Nolem

個人經驗,Nlb+fw 針對oracle和網站連線 bind 住固定通道,或是heart beat fixed tunne 應該可一樣納入不需排除

Post a comment