首先說一下系統基礎架構:
服務器:weblogic11g集群
數據庫:oracle數據庫Rac
出錯信息: 1.java.sql.SQLRecoverableException: Closed Connection
2.Test "SELECT 1 FROM DUAL" set up for pool "mds-soa" failed with exception: "java.sql.SQLRecoverableException: IO Error: Broken pipe"
日志信息是以上兩種,可以看出是輸入源的問題。
解決思路及步驟:1.check 在weblogic的jndi中的數據源是否能夠正常連接。核實以后;
2.檢查數據庫服務器是否正常。檢查后,發現一台數據庫服務器down了。
然后檢查業務數據,發現,在down之后,weblogic服務器端已經連續報了兩天這種錯誤。
這種情況非常不符合常理;
3.我們首先懷疑的是RAC環境安裝配置有問題,沒有在集群中的一台數據庫down了之后及時的切換。
經排查,不可能是這種原因。
4.再次返回到weblogic集群配置中,我們仔細檢查數據源的配置,一次點擊Domain->Service->Data Source->Configuration->Connection Pool
在Advance中,我們發現了一個配置“Test Connections On Reserve”,其屬性值為false
此屬性的含義為:“使 WebLogic Server 能夠在將連接提供給客戶機之前對連接進行測試。(要求指定“測試表名稱”。)此測試在響應客戶機對池中的連接的 請 求時將添加短時間的延遲,但會確保客戶機收到有效連接。MBean 屬性 (不適用於應用程序模塊)”
此時,改變改屬性值為true,問題解決
此屬性若為true,則在調用jndi的方式調用數據庫的時候,會首先檢查“SQL SELECT 1 FROM DUAL”,若值不為null,則weblogic將會和RAC中的一台數據庫服務器建立連接;若值為null,則RAC回重新分配其他的服務器。
