无法从某些客户端计算机连接到 Oracle 数据库

无法从某些客户端计算机连接到 Oracle 数据库

我有一个连接到 Oracle 数据库的应用程序,该应用程序在我能找到的任何开发机器上都能正常工作,但在生产或测试服务器环境中运行时出现以下错误:

java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3668)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:353)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:371)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:551)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:351)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
....

与开发机器相比,这里的测试和生产环境的网络配置总是有点粗糙,所以我的第一个假设是防火墙没有正确配置,但我已经检查了这些,并且为了确保万无一失,我尝试从受影响的机器通过必要的端口 telnet 到 Oracle 服务器,并且工作正常:

[root@CLIENT ~]# telnet [Oracle Host IP] 1521
Trying [Oracle Host IP]...
Connected to [Oracle Host IP].
Escape character is '^]'.
^C

Connection closed by foreign host.

这里还有什么我可能遗漏的吗?或者至少还有其他关于调试此问题的建议吗?

我想如果我可以从受影响的机器 ping 到目标 Oracle 服务器甚至在端口上进行 telnet 那么它们应该能够通信但不确定是否存在我遗漏的 Oracle 特定内容。

答案1

没有答案(至少现在还没有)但我需要格式化。

我对 Talend 一无所知。可能它以不寻常的方式显示异常/堆栈跟踪。或者另一种可能性:我做了一些实验,我可以使用 2006 年遗留下来的旧 ojdbc14.jar 获得更像您的堆栈跟踪,特别是没有原因链,但仍然不完全相同。

为了在黑暗中获得至少一点光亮,我建议你(存储并)编译这个最小的独立应用程序

import java.sql.DriverManager;

public class ConnectOradb {
    public static void main (String [] args) throws Exception {
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        // may be unnecessary (but harmless) for newer versions
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
        DriverManager.getConnection(url, "user", "pass"); 
    }
}

根据需要更改主机、端口、SID、用户、pw,然后运行它,如果系统上有多个 ojdbc 库,则使用相同的 ojdbc 库,最好使用相同的 JRE,尽管我怀疑这很重要:/path/to/java -cp .;/path/to/ojdbc?.jar ConnectOradb

如果您不能这样做,但您可以确定 ojdbc 的版本并且它很旧,您可以尝试较新的版本,这可能会有所帮助。

相关内容