与Oracle DB连接时,网络适配器无法建立连接?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (98)

当试图通过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&TVPN连接从家里连接时,它不起作用。

我已经确认我可以到达IP地址,并且在端口1521上传送IP,这个端口工作得很好。从本地WebLogicApplicationServer连接数据源也可以正常工作。此外,当试图通过sqlDeveloper连接到数据库时,我也可以访问数据库。

不过,我需要从一个独立的应用程序(为了测试目的)访问数据库。下面是试图连接数据库的代码的摘录:

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");
}
提问于
用户回答回答于

如果它位于linux框上,我建议您将数据库ip名称和ip解析添加到/etc/hosts...

用户回答回答于

当客户端连接到Oracle服务器时,它首先连接到Oracle侦听器服务。它经常将客户端重定向到另一个端口。因此,客户端必须在另一个端口上打开另一个连接,该端口被防火墙阻塞。

因此,实际上您可能由于Oracle端口重定向而遇到防火墙问题。应该可以使用客户端机器上的网络监视器或防火墙上的防火墙管理软件来诊断它。

扫码关注云+社区