我正在"操作超时。 ERRORCODE = -4499,SQLSTATE = 08001"连接到远程DB2

时间:2015-08-06 22:06:53

标签: db2

我正在尝试使用IBM Type 4 JDBC驱动程序连接到远程DB2。 这是我的配置:

服务器:

  • Windows 7专业人员
  • DB2 LUW V10.5
  • DB2 SVCENAME = 50000
  • 要通信的TCP / IP

客户端:

  • OS / x V10.10.3
  • Eclipse Mars
  • IBM DB2 Java Type 4驱动程序

我的理解是,如果您使用Java编写客户端应用程序并使用类型4纯Java驱动程序,则客户端不必安装客户端。该应用程序将使用DRDA直接连接到远程数据库。

以下是我尝试访问远程db2的代码片段:

public class BlobRetrieval {

    static String databaseDriver;
    static String dbURL;
    static String userName;
    static String password;
    static Connection passConn; 

public static void main(String[] args) {        
    databaseDriver = "com.ibm.db2.jcc.DB2Driver";
    dbURL = "jdbc:db2://192.168.1.81:50000/LOBDB";
    userName = "ace";
    password = "ace";
    try {
        Class.forName(databaseDriver).newInstance();
        System.out.println("register successful");
        Connection connection = DriverManager.getConnection(dbURL, userName, password);
        System.out.println("connection successful");
        passConn = connection;
        PreparedStatement preparedStatement=connection.prepareStatement("SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?");
        preparedStatement.setString(1, "0738425826");
    }
}

当我执行这些语句时,出现以下错误:

  

注册成功       com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException:[jcc] [t4] [2043] [11550] [4.19.26]例外情况   java.net.ConnectException:打开服务器的套接字时出错   端口50,000上的/192.168.1.81,带有消息:操作超时。   ERRORCODE = -4499,SQLSTATE = 08001        在com.ibm.db2.jcc.am.kd.a(未知来源)        在com.ibm.db2.jcc.am.kd.a(未知来源)        在com.ibm.db2.jcc.t4.ac.a(未知来源)        在com.ibm.db2.jcc.t4.ac.(未知来源)        在com.ibm.db2.jcc.t4.a.b(未知来源)        在com.ibm.db2.jcc.t4.b.newAgent_(未知来源)        at com.ibm.db2.jcc.am.Connection.initConnection(Unknown Source)        在com.ibm.db2.jcc.am.Connection。(未知来源)        在com.ibm.db2.jcc.t4.b.(未知来源)        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)        在com.ibm.db2.jcc.DB2Driver.connect(未知来源)        在com.ibm.db2.jcc.DB2Driver.connect(未知来源)        在java.sql.DriverManager.getConnection(DriverManager.java:664)        在java.sql.DriverManager.getConnection(DriverManager.java:247)        在dbAccessPackage.BlobRetrieval.main(BlobRetrieval.java:30)        引起:java.net.ConnectException:操作超时        at java.net.PlainSocketImpl.socketConnect(Native Method)        在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)        在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)        在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)        在java.net.Socket.connect(Socket.java:589)        在com.ibm.db2.jcc.t4.w.run(未知来源)        at java.security.AccessController.doPrivileged(Native Method)

2 个答案:

答案 0 :(得分:1)

在许多情况下,服务器上的本地防火墙是个问题。 Windows防火墙可能会阻止传入的请求。

您可以检查端口是否已打开(防火墙报告的阻止)?是否在" db2diag.log"中看到了任何活动。 DB2服务器的(诊断日志文件)?作为一个快速测试,你可以做一个" telnet 192.168.1.81 50000"从您的客户端机器。如果成功并且您有连接,则防火墙不再是问题。

答案 1 :(得分:0)

我有同样的问题。并花了大约4个小时,然后下面的解决方案为我工作:

Project Explorer - >服务器 - > Tomcat v X.X - >打开server.xml

<Connector port="8484" protocol="AJP/1.3" redirectPort="8484 "/>

我使用我分配给服务器的相同端口号(即8080或8484)更改我的端口和redirectPort。

希望这会奏效。