JDBC経由でリモートのOracleデータベースに接続しようとすると、次の例外が発生します。
Java.sql.SQLRecoverableException: IO-fout: The Network Adapter could not establish the connection
at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:419)
at Oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.Java:536)
at Oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.Java:228)
at Oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.Java:32)
at Oracle.jdbc.driver.OracleDriver.connect(OracleDriver.Java:521)
at Java.sql.DriverManager.getConnection(DriverManager.Java:322)
at Java.sql.DriverManager.getConnection(DriverManager.Java:358)
以下は私のセットアップです。
Database: Oracle 10g Release 2 Standard Edition
JDBC library: ojdbc6.jar
JDBC driver: Oracle.jdbc.driver.OracleDriver
JDBC URL: jdbc:Oracle:thin:@9.2.2.2:1521:ORCL where ORCL is database's SID
JDBC User/pwd: Correct username / password
この問題について奇妙なのは、私が仕事から仕事をするとき、接続がうまく機能することです。ただし、自宅からAT&T VPN接続経由で接続しようとすると、機能しません。
私は、IPアドレスに到達でき、ポート1521でIPをtelnetで接続できることを確認しました。ローカルのWebLogic Application Serverからデータソースへの接続も正常に機能します。さらに、sqldeveloperを介してデータベースに接続しようとすると、データベースにもアクセスできます。
ただし、(テスト目的で)スタンドアロンアプリケーションからデータベースにアクセスする必要があります。この問題が発生する理由は誰にもわかりますか?そして、リモートのOracleデータベースに接続するための代替手段があるかどうか、sqldeveloperとweblogicがおそらく使用する代替手段があるかどうか?
以下は、データベースに接続しようとするコードの抜粋です。
public static void main(String args[]) throws ClassNotFoundException, SQLException {
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:@9.2.2.2:1521:ORCL", "user", "pwd");
}
クライアントがOracleサーバーに接続すると、最初にOracleリスナーサービスに接続します。多くの場合、クライアントを別のポートにリダイレクトします。そのため、クライアントは別のポートで別の接続を開く必要があり、これはファイアウォールによってブロックされます。
したがって、実際には、Oracleポートのリダイレクトが原因でファイアウォールの問題が発生した可能性があります。クライアントマシンのネットワークモニターまたはファイアウォール上のファイアウォール管理ソフトウェアを使用して、診断することができるはずです。
Linuxボックス上にある場合は、/etc/hosts
にデータベースIP名とIP解決を追加することをお勧めします。
私は同じエラーがあり、上記を行うと、それは正常に動作します。
Java Ranch:
http://www.coderanch.com/t/300287/JDBC/Java/Io-Exception-Network-Adapter-could
「「Io例外:ネットワークアダプターは接続を確立できませんでした」例外の解決策は、データベースサーバーのIPをDNS名に置き換えることでした。」
以前にも同様の問題がありました。しかし、これは接続文字列でIPアドレスの代わりにホスト名を使用し始めたときに解決されました。