2012-09-25 91 views
6

我們開始在我們的生產環境中有時出現這種「網絡適配器無法建立連接」的問題,我做了很多谷歌並在這裏經歷了一些問題,但仍然沒有得到解決方案。IOException:網絡適配器無法建立連接

以下是關於我們的環境的一些信息:

  1. 我們正在使用RAC與2個Oracle實例(10.2.0.4版)。
  2. 我們有幾個在RAC之上運行的應用程序服務器(JBoss AS5)。
  3. oracle-ds.xml中的連接URL是「jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = db1_vip)(PORT = 1521))(ADDRESS =( (CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = G1db)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = YES)PROTOCOL = TCP)(HOST = db2_vip)(PORT = 1521) 120)(DELAY = 5))))」
  4. 我們添加db1_vip/db2_vip以及2個Oracle實例的實際IP到兩個應用服務器的/ etc/hosts中
  5. 有Oracle實例和應用服務器之間的防火牆,但是我們在兩個oracle實例上打開了1521端口。

我們已經運行下面的測試,以檢查是否有網絡或Oracle TNS監聽任何問題:從應用服務器到兩個Oracle實例

  1. 跑平,一切都沒有任何丟包工作正常。
  2. 將1521端口從應用服務器telnet到兩個oracle實例,沒有錯。
  3. tnsping也可以正常工作。
  4. 我們檢查了監聽器日誌,但沒有發現任何有價值的東西。

最奇怪的是,這個錯誤在一臺應用服務器上每小時發生10次左右,但在另一臺應用服務器上每天只發生1次或2次。

任何人都可以在這個錯誤?

感謝

[EDIT4]:我們發現超時的問題用tnsping一個Oracle實例的時候,所以我們改變了JDBC URL連接只有一個實例,發現IOException異常不會再發生了,所以我們認爲這個問題是有關與數據庫和DBA團隊將繼續研究這一點。

[EDIT3]:我們沒有以下嘗試:

  1. 禁用應用服務器和數據庫服務器之間的防火牆
  2. 使用IP而不是主機名
  3. 使用Wireshark來檢查是否有任何TCP包問題。

他們沒有成功,有人請幫助〜

[編輯]:錯誤堆棧跟蹤:

java.sql.SQLException: Io Exception: The Network Adapter could not establish the connection 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:207) 
    ... 5 more 
+0

它只是一個提示:我在x64上遇到了java7的網絡錯誤。如果您使用的是java7,請嘗試版本6. – Mirko

+0

我們在兩個應用程序服務器上都使用jdk5。 – asticx

+0

嘗試使用數據庫服務器的IP地址而不是其主機名稱;如果這個工作沒有任何失敗,那麼你可以將這個問題縮小到dns主機名解析。 – Zaki

回答

6

錯誤

值java.sql.SQLException:木衛一例外:網絡適配器無法建立連接

Java/JDBC無關。 這是您的網絡設置出現問題時得到的錯誤。我的猜測是防火牆問題。你可以禁用它,看看錯誤是否仍然存在?

+1

我們可以這樣做,但我真的懷疑這是真正的原因,因爲此錯誤以間歇方式發生,ping和telnet工作,另一個應用服務器在大多數時間工作。 – asticx

+0

我明白了,你不能再禁用它。 我在想,因爲它一旦發生,防火牆可能會丟失一些tcp/ip數據包,並且這被客戶機上的tcp堆棧解釋爲不可能連接。但這只是一個假設。 –

+0

我們確實使用了應用程序服務器和數據庫服務器之間的ping命令,但沒有發現任何丟包情況,不確定這是否是最好的方法。 – asticx

-1

編輯的連接並進行測試,雖然你的TNSPING發現!如果使用VirtualBox的(適配器檢查許可證全部),在我的情況下,錯誤當我使用ip爲,而不是使用localhost

相關問題