我使用来自oracle数据库的数据开发了一个闪亮的应用程序,该应用程序已开发并在Windows环境中平稳运行。为了在大学中部署我的应用程序,我将其编写为一个程序包并将其安装在ubuntu服务器上。 Ubuntu 18.04.2 LTS(GNU / Linux 4.15.0-50-通用x86_64) 已安装闪亮的服务器,并找到软件包,应用程序正在运行。
但是当我尝试创建与oracle的连接时,我的应用程序断开连接并要求我重新加载会话。
所以我只提取了用于建立连接的代码,并包含了几条消息,并且在使用RJDBC包中的dbconnet时,它挂起了。
我检查了几个环境变量,例如PATH,JAVA_HOME,LD_LIBRARY_PATH。我几乎没有Linux经验。
我的R版本 R版本3.6.0(2019-04-26)-“植树” 版权所有(C)2019 The R Foundation for Statistical Computing 平台:x86_64-pc-linux-gnu(64位)
Java版本 openjdk版本“ 11.0.3” 2019-04-16 OpenJDK运行时环境(内部版本11.0.3 + 7-Ubuntu-1ubuntu218.04.1) OpenJDK 64位服务器VM(内部版本11.0.3 + 7-Ubuntu-1ubuntu218.04.1,混合模式,共享)
Oracle数据库 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
为什么不能建立连接,有什么建议吗?
答案 0 :(得分:0)
对于每个有类似问题的人,我想发布我的解决方案。 仅为用户根目录设置了环境变量,而没有为包括闪亮应用程序中的用户在内的所有其他用户设置环境变量。
https://askubuntu.com/questions/866161/setting-path-variable-in-etc-environment-vs-profile
此页面也非常有助于理解将ubuntu连接到oracle的过程 https://edstevensdba.wordpress.com/2011/02/09/sqlnet_overview/
答案 1 :(得分:0)
我知道这很旧了,要求它的用户很久以前就搬了,但以防万一有人遇到同样的问题,我将发布我的解决方案:我通过添加以下行来解决了这个问题:
options(java.parameters="-Djava.security.egd=file:///dev/urandom")
library(rJava)
由于/ dev / random的阻塞性质,显然there is a problem是Linux上的JDBC驱动程序。 tcpdump跟踪显示流量,但是在“身份验证会话” TNS数据包之后连接被卡住。一条痕迹表明该进程已锁定,等待/ dev / random:
open("/dev/random", O_RDONLY) = 22
...
read(22, 0x7ffc27416f10, 8) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
余下的搜索工作。
这几天我一直被困住,这就是我希望张贴在这里的答案,所以就在那里。