无法打开 lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' [重复]

Posted

技术标签:

【中文标题】无法打开 lib \'/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1\' [重复]【英文标题】:Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' [duplicate]无法打开 lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' [重复] 【发布时间】:2020-03-14 17:55:04 【问题描述】:

背景: 我将闪亮的应用程序部署到 Linux Ubuntu 16.04 上的闪亮服务器。我的应用需要连接到 Oracle DB,所以我使用 ODBC 从我的 Ubuntu 服务器访问。

问题 : 当我在浏览器中打开我的应用程序时,它显示“已与服务器断开连接”

所以我检查了我的日志文件/var/log/shiny-server/*.log。错误信息显示如下:

警告:错误:nanodbc/nanodbc.cpp:950: 01000: [unixODBC][驱动程序管理器]无法打开 lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : 找不到文件 58: 匿名 执行停止

信息 我不知道它是怎么出错的,所以我尝试列出错误的相关信息。如果有其他线索我可以提供,请告诉我,以便您更容易帮助我。

以下是我在应用中连接oracle db的方式

# ui.r
library(shiny)
shinyUI(
     absolutePanel(
       tableOutput( "table" )  
    )   
)
# server.r
library(shiny)
library(DBI)
library(odbc)
con <- DBI::dbConnect(odbc::odbc(),
                      "MES_CY" ,    # data source name
                      UID = "xxx",
                      PWD = "xxx"
)

shinyServer(function(input, output) 
  output$table <- renderTable(
    dbGetQuery(con,'
      select  * from MyTable
    ') 
  )
)

由于应用程序在本地运行良好,我怀疑我的服务器可能无法连接到数据库。

因此,我采用相同的代码在我的闪亮服务器中使用 R 连接到 DB

con <- DBI::dbConnect(odbc::odbc(),
                      "MES_CY" ,   #  my data source name
                      UID = "xxx",
                      PWD = "xxx"
)
dbGetQuery(con,'
    select  * from MyTable
') 

它有效,我可以获取我的数据。

然后我检查是否可以使用isql访问oracle,没问题,我可以从我的db中查询数据。

chaosheng@Shiny-Srv:~$ isql -v MES_CY
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

我还检查是否所有依赖项都使用 ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

linux-vdso.so.1 =>  (0x00007ffe103d1000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f832bdcc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f832bac3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f832b8a6000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f832b68c000)
libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f8328d1d000)
libodbcinst.so.1 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.1 (0x00007f8328b0b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8328740000)
             /lib64/ld-linux-x86-64.so.2 (0x0000556d2817c000)
libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f8328373000)
libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007f8328171000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f8327f66000)

以下是我对odbcinst.iniodbc.ini的配置

#odbcinst.ini
[Oracle 11g ODBC driver]
Description     = Oracle ODBC driver for Oracle 11g
Driver          = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
Setup           =
FileUsage       =
CPTimeout       =
CPReuse         =
Driver Logging  = 7
#odbc.ini
Description = OracleSQL
Driver = Oracle 11g ODBC driver
Trace = No
TraceFile = /tmp/oracleodbc.log
Database = MES_PROD
Servername = MES
UserID = xxx
Password = xxx
Port = 1521
ReadOnly = No

以下是我在$HOME/.bashrc中设置的环境变量

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin:$TNS_ADMIN

这是我当前的环境

XDG_SESSION_ID=1707
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=xx.xxx.xx.xx xxxxx xx
OLDPWD=/usr/lib/oracle/11.2/client64/lib
SSH_TTY=/dev/pts/0
USER=chaosheng
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:/usr/lib/oracle/11.2/client64/lib:
TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin:
MAIL=/var/mail/chaosheng
PATH=/usr/lib/oracle/11.2/client64/bin:/home/chaosheng/bin:/home/chaosheng/.local/bin:/usr/lib/oracle/11.2/client64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/oracle/11.2/client64/bin
PWD=/home/chaosheng
LANG=en_HK.UTF-8
SHLVL=1
HOME=/home/chaosheng
LANGUAGE=en_HK:en
LOGNAME=chaosheng
SSH_CONNECTION=xx.xxx.xx.xx xxxxx xx.xxx.xx.xx xx
LESSOPEN=| /usr/bin/lesspipe %s
XDG_RUNTIME_DIR=/run/user/1000
ORACLE_HOME=/usr/lib/oracle/11.2/client64
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/env

【问题讨论】:

Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so' : file not found、Connecting Oracle using unixODBC: Can't open lib '/usr/lib/oracle/12.1/client/lib/libsqora.so.12.1'、Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 when create "Database Monitor" item in zabbix 等可能重复 【参考方案1】:

正如一些社区成员所建议的,我的问题与这个问题非常相似:Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 when create "Database Monitor" item in zabbix。

尽管这两个问题的原因几乎相同,但解决方案可能略有不同。 因此,我仍然发布我如何解决我的问题。

首先,我在配置文件中犯了一些设置错误。

首先,我需要在$HOME/.profile/home/MyName/.profile)中设置我的环境变量 尽管如此,我只在$HOME/.bashrc/home/MyName/.bashrc)中设置了这些

其次,我一开始使用/etc/shiny-server/shiny-server.conf中的默认设置。

run_as shiny; 
preserve_logs true;
server 
  listen 3838;

  location /  
    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  


显然,上述设置不起作用。

由于我将环境变量的设置放在/home/MyName/.profile 中,我需要指定run_as MyName 以便/home/MyName/.profile 中定义的任何环境变量都可用于R 进程。

preserve_logs true;
server 
  listen 3838;

  location / 
    run_as MyName; 
    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  


我对linux系统的了解非常有限。

也许以上不是问题的全貌,但它只是解决了问题。

【讨论】:

以上是关于无法打开 lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' [重复]的主要内容,如果未能解决你的问题,请参考以下文章

php操作oracle查询时中文乱码

Linux安装Oracle instantclient精简客户端

linux怎样找到安装oracle安装目录

linux 怎么查找oracle11g的安装目录

Oracle数据库语法

为 python 安装 cx_oracle