【问题标题】:Ubuntu 18.04 RJDBC:JDBC connection to oracle hangs no responseUbuntu 18.04 RJDBC:到 oracle 的 JDBC 连接挂起没有响应
【发布时间】:2019-10-27 00:02:40
【问题描述】:

我使用来自 oracle 数据库的数据开发了一个闪亮的应用程序,我的应用程序在我的 Windows 环境中开发和运行顺利。为了在我的大学中部署我的应用程序,我将其编写为一个包并将这些包安装在 ubuntu 服务器上。 Ubuntu 18.04.2 LTS(GNU/Linux 4.15.0-50-generic x86_64) Shiny 服务器已安装并找到包,应用程序正在运行。

但是当我尝试创建到 oracle 的连接时,我的应用程序断开连接并要求我重新加载会话。

所以我只提取了构建连接的代码并包含了几条消息,它在使用 RJDBC 包中的 dbconnet 时挂起。

我检查了几个环境变量,例如 PATH、JAVA_HOME、LD_LIBRARY_PATH。我几乎没有使用 linux 的经验。

我的 R 版本 R 版本 3.6.0 (2019-04-26) -- 《种树》 版权所有 (C) 2019 统计计算 R 基金会 平台:x86_64-pc-linux-gnu(64位)

Java 版本 openjdk 版本“11.0.3” 2019-04-16 OpenJDK 运行环境(build 11.0.3+7-Ubuntu-1ubuntu218.04.1) OpenJDK 64-Bit Server VM(build 11.0.3+7-Ubuntu-1ubuntu218.04.1,混合模式,共享)

Oracle 数据库 Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64 位生产

我正在使用驱动程序 ojdbc7.jar,因为它似乎是最新版本。

    library(rJava)
    library(DBI)
    library(RJDBC)

    options(java.parameters="-Xmx2g")
    .jinit()
    print(.jcall("java/lang/System", "S", "getProperty", "java.version"))

    initialize_db_con <- function(driverClass = 'oracle.jdbc.driver.OracleDriver',
                          classPath = "pathtomyfile/ojdbc7.jar",
                          dbn = 'jdbc:oracle:thin:@xx.xx.xx.xx:xxxx/mydb',
                          usr = NULL, pwd = NULL) {
      driverClass <- 'oracle.jdbc.driver.OracleDriver'
      message("Setting user and password manually")

      creds <- list(user = usr, pw = pwd)


      drv <- RJDBC::JDBC(driverClass = driverClass, classPath = classPath, identifier.quote = '´')
      message("driver is set")
      con <- RJDBC::dbConnect(drv = drv, dbn, creds$user, creds$pw)
      message("connection has been build")
      return(con)
    }


    usr <- "myuser"
    pwd <- "mypassword"

    con <- initialize_db_con(usr=usr, pwd = pwd)

所以在等待大约 30 秒后会出现此错误消息。

    Error in .jcall("java/sql/DriverManager", "Ljava/sql/Connection;",      "getConnection",  :
    ignoring SIGPIPE signal

为什么无法建立连接,有什么建议吗?

【问题讨论】:

  • 这个列表越来越多,不知道是什么意思...?!
  • 哦,按CTRL + C
  • 好的,所以我得到了这 6 个数据包传输,6 个数据包接收,0% 数据包丢失,时间 5102ms rtt min/avg/max/mdev = 0.020/0.021/0.023/0.005 ms
  • 我进行了一些搜索,但只能找到有关您 2012 年错误的帖子:r.789695.n4.nabble.com/… 当我查看存档(2012 年第四季度)时,答案似乎是“尝试 ROracle”。抱歉,我无法提供更多帮助
  • 谢谢菲尔,我也找到了这个页面。但我很确定必须有 rJava、RJDBC 的解决方案。我还找到了这个页面github.com/Microsoft/mssql-jdbc/issues/784,这可能与我的问题有关吗?如果是这样,我该如何解决?

标签: r ubuntu jdbc dbconnection rjdbc


【解决方案1】:

我知道这是旧的,并且询问它的用户很久以前就离开了,但是以防万一有人遇到同样的问题,我将发布我的解决方案:我通过添加以下行解决了它:

options(java.parameters="-Djava.security.egd=file:///dev/urandom")
library(rJava)

显然there is a problem 在 Linux 上使用 JDBC 驱动程序,因为 /dev/random 的阻塞特性。 tcpdump 跟踪显示流量,但在“auth session”TNS 数据包后连接卡住了。 strace 显示进程被锁定等待 /dev/random:

open("/dev/random", O_RDONLY)           = 22
...
read(22, 0x7ffc27416f10, 8)             = ? ERESTARTSYS (To be restarted if SA_RESTART is set)

稍加搜索就完成了剩下的工作。

这几天我一直被困在这个问题上,这就是我希望在这里发布的答案,所以它就是这样。

【讨论】:

    【解决方案2】:

    对于有类似问题的每个人,我想发布我的解决方案。 环境变量只为用户 root 设置,而不是为所有其他用户设置,包括来自 shiny-app 的用户。

    https://askubuntu.com/questions/866161/setting-path-variable-in-etc-environment-vs-profile

    这个页面对理解ubuntu连接oracle的过程也很有帮助 https://edstevensdba.wordpress.com/2011/02/09/sqlnet_overview/

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2014-06-06
      相关资源
      最近更新 更多