oracle数据库12.2中运行的java存储过程的jdbc连接不起作用

eni9jsuy  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(368)

尝试从运行在oracle数据库中的java存储过程创建oracle db连接时,我们收到一条错误消息。我们已经隔离了连接,它正在使用oracle数据库12.1,运行java1.7。自从升级到oracledatabase12.2和java1.8之后,我们得到以下错误消息。

ORA-29532: Java call terminated by uncaught Java exception: 
java.lang.RuntimeException: IO Error: The Network Adapter could not establish the connection 

Attempting to connect with: jdbc:oracle:thin@########
An error occurred in ###: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

下面是我们用来测试连接的代码

import java.sql.Connection;
import java.sql.SQLException;

import oracle.jdbc.pool.OracleDataSource;

public class RemoteDBTest {

    public static String remoteConnection()
     throws SQLException
    {
      StringBuffer sb = new StringBuffer();
      String userId = "xxxx";
      String password = "xxxxx";
      String url = "jdbc:oracle:thin:@server:port/SID"; // Destination is a remote database. Actual host, port, and service have been replaced in this example.
      Connection conn = null;

      OracleDataSource ods = new OracleDataSource();
      ods.setUser(userId);
      ods.setPassword(password);
      ods.setURL(url);
      System.out.println(url);
      System.out.println(System.currentTimeMillis());
      try {
          conn = ods.getConnection();
      } catch (Exception e){
          System.out.println(System.currentTimeMillis());
          throw e;
      }
      System.out.println(System.currentTimeMillis());
      sb.append("Auto commit = " + conn.getAutoCommit());
      conn.close();

      return sb.toString();
    }

    public static void main(String[] args) {
        try{
           System.out.println(remoteConnection());
        } catch (SQLException e){
           e.printStackTrace();
        }
    }
}

目前,oracle支持部门唯一有效的解决方法是设置属性 java.net.preferIPv4Stacktrue 但是,当通过代码设置时,它会将连接的执行时间增加到9秒。我们试图通过命令行和\u java\u options环境变量设置这个属性,但是,它似乎不会影响运行存储过程的jvm。
如有任何意见或建议,将不胜感激。
主机操作系统:windows server 2016
oracle database 12c enterprise edition 12.2.0.1.0版-64位产品
注意:这不是io错误的重复:网络适配器无法建立连接。我们的连接参数是正确的,如果我们添加 System.setProperty("java.net.preferIPv4Stack" , "true"); 我们的代码。但是,如上所述,这会带来不可接受的性能开销。

oprakyz7

oprakyz71#

很可能您使用了错误的url“jdbc:oracle:thin:@server:端口/sid“
应jdbc:oracle:thin:@serverhostname.com:1521/分贝
@serverhostname.com oracle db 1521的主机名是数据库的一个端口(我认为1521是默认值)sid-db应该是数据库的一个sid(向数据库管理员询问正确的sid)

相关问题