gpt4 book ai didi

r - Ubuntu 18.04 RJDBC :JDBC connection to oracle hangs no response

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:16 25 4
gpt4 key购买 nike

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

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

所以我只提取了建立连接的代码并包含了一些消息,它在使用 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-16OpenJDK运行环境(build 11.0.3+7-Ubuntu-1ubuntu218.04.1)OpenJDK 64-Bit Server VM(build 11.0.3+7-Ubuntu-1ubuntu218.04.1,混合模式,共享)

甲骨文数据库Oracle Database 11g 企业版 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

为什么连接不上,有什么建议吗?

最佳答案

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

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

显然 there is a problem由于/dev/random 的阻塞性质,在 Linux 上使用 JDBC 驱动程序。 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)

剩下的就是一些谷歌搜索。

我已经坚持了几天,这就是我希望张贴在这里的答案,所以就这样了。

关于r - Ubuntu 18.04 RJDBC :JDBC connection to oracle hangs no response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com