网络适配器无法连接Oracle DB时无法建立连接。

21

当尝试通过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&amp;T VPN连接从家里连接时,它就无法连接。
我已确认我可以访问IP地址,并且也已经通过端口1521进行了telnet测试,一切正常。从本地WebLogic应用服务器连接数据源也没问题。此外,当我尝试通过sqldeveloper连接数据库时,我也可以到达数据库。
然而,我需要从独立应用程序(供测试使用)访问数据库。有没有人知道为什么会出现这个问题?是否有其他连接到远程Oracle Database的替代方法,可能与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");
}
4个回答

17

当客户端连接到Oracle服务器时,它首先连接到Oracle监听器服务。通常会将客户端重定向到另一个端口。因此,客户端必须在不同的端口上打开另一个连接,这个端口可能被防火墙阻止。

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


3
如果运行在Linux系统上,我建议您将数据库IP名称和IP解析添加到/etc/hosts文件中。
我也遇到过同样的错误,当我们执行以上操作后,它就可以正常工作了。

1

“数据库服务器的IP到DNS名称”,你能解释一下吗?我不理解,我也遇到了同样的问题。谢谢。 - Rohit Elayathu

0

我以前也遇到过类似的问题。但当我在连接字符串中使用主机名而不是IP地址时,问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接