在闪亮的服务器上使用ROracle连接到Oracle数据库

时间:2014-02-05 18:29:00

标签: shiny-server

我们最近能够获得一个小型的redhat服务器来试验闪亮的服务器。我们的IT部门运行了闪亮的服务器并安装了Oracle客户端,但我无法让ROracle在闪亮的服务器上工作。他们(IT)已经决定这是一个应用程序问题,并开始放弃......

最初ROracle根本没有在服务器上运行,但是我们通过在我的.bashrc文件中设置LD_LIBRARY_PATH来使用我的用户帐户。完成后我可以登录服务器,从R查询数据库。我甚至可以使用runApp()从R运行我的闪亮应用程序。

当我尝试通过闪亮服务器访问同一个应用时,我收到以下错误:

Listening on port 40679
Loading required package: DBI
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/usr/lib64/R/library/ROracle/libs/ROracle.so':
  libclntsh.so.11.1: cannot open shared object file: No such file or directory
Error : package or namespace load failed for 'ROracle'
Error : package or namespace load failed for 'ROracle'

这是我在设置LD_LIBRARY_PATH变量之前在我的帐户上遇到的相同错误。服务器以用户闪亮的方式运行,但显然不会运行任何启动脚本,因此为我的用户修复它不会为闪亮的用户修复它。这远远超出了我的知识领域,正如我所说,我们的IT部门表示他们没有想法。

我没有sudo访问服务器所以我可以尝试的东西是有限的。我尝试从我的server.R脚本设置LD_LIBRARY_PATH,然后使用Sys.setenv()和使用system()加载ROracle,但这些不起作用。我们一直试图帮助我的DBA尝试在/etc/init/shiny-server.conf中设置LD_LIBRARY_PATH,但这似乎也不起作用。

我真的希望这里有人有一些想法。

由于

4 个答案:

答案 0 :(得分:4)

经过几天令人沮丧的日子后,我找到了解决方案。您需要在位于/etc/init/shiny-server.conf的upstart脚本中设置LD_LIBRARY_PATH变量,但是对于upstart documentation,您需要使用env关键字对其进行定义。所以补充:

env LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH

到shiny-server.conf脚本的开头似乎解决了这个问题。

答案 1 :(得分:3)

这是我的博客文章(大约一年前),详细描述了如何让R Studio Server与Oracle合作。 LD_LIBRARY_PATH,OCI Lib和所有的东西都提供了。也许这有助于其他人:http://learnfrominfo.tumblr.com/post/38382388429/connect-r-studio-server-to-an-oracle-database-with

答案 2 :(得分:1)

我遇到了与PHP和Apache相同的问题。

请参阅PHP文档中的Setting the Oracle Environment

另外,请参阅注释 - 您在/etc/init/shiny-server.conf中使用了哪种语法?

答案 3 :(得分:0)

SERVER.R
library
library(RMySQL)
library(caTools)
library(rpart)
library(RJDBC)
shinyServer(

  function(input ,output)
  {
    dvr =JDBC("oracle.jdbc.OracleDriver",classPath="D:/ojdbc6.jar")

url = ""
user = ""
password = ""
jd =dbConnect(dvr,url, user, password)
a1 <- eventReactive(input$predict,
                    {
                      a<-input$ref
                      table2<-data.frame(dbGetQuery(jd,paste0("
                                select colnames from Tablename where REFNO=",a,"  and ROWNUM<15
                                                    ")))
                      print(table2)
                      print(bs<-table2)

                    }

)




output$dis<-renderTable({
    a1()

    })

 }
)