【问题标题】:Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 when create "Database Monitor" item in zabbix在zabbix中创建“数据库监视器”项时无法打开lib'/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
【发布时间】:2017-01-05 00:07:10
【问题描述】:

在此之前,已安装 unixODBC

  1. unixODBC.x86_64 2.2.14-14.el6
  2. unixODBC-devel.x86_64 2.2.14-14.el6

并且安装的 Oracle ODBC 驱动程序是:

  1. oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64
  2. oracle-instantclient11.2-odbc-11.2.0.1.0-1.x86_64
  3. oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64

还有 odbcinst.ini:

[Oracle-11g]
Description=ODBC for Oracle
Driver=/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
UsageCount=1
FileUsage=1
Driver Logging = 7

odbc.ini:

[test]
Driver      = Oracle-11g
DSN = Oracle-11g
ServerName =  gzdb
UserID = xxx
Password = xxx

并且 ODBC 连接工作成功

shell> isql -v test
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

为了启用 ODBC 支持,我重新编译了带有标志的 zabbix3.0:--with-unixodbc

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-unixodbc

并用新编译的二进制文件替换旧的 zabbix_sever。

但是,当我在 zabbix 中创建“数据库监视器”项时,仍然出现错误: enter image description here

所以我运行su - zabbix -c "ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1" 看起来不错

 su - zabbix -c "ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1"
    linux-vdso.so.1 =>  (0x00007fffe21ee000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f1ad095e000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f1ad06d9000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1ad04bc000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f1ad02a3000)
    libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f1acdd72000)
    libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f1acdb61000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f1acd7cd000)
    /lib64/ld-linux-x86-64.so.2 (0x000000373c600000)
    libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f1acd404000)
    libaio.so.1 => /lib64/libaio.so.1 (0x00007f1acd203000)
    libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f1accffa000)

我真的不知道错误是什么意思

【问题讨论】:

    标签: oracle zabbix unixodbc


    【解决方案1】:

    那是因为您的 zabbix 服务器不知道在哪里寻找 Oracle 库。 尝试将环境变量LD_LIBRARY_PATH导出到zabbix服务器

    不知道你用的是什么操作系统,我用的是 CentOS 7

    创建 /etc/sysconfig/zabbix-server 文件,并使用编辑

    LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/oracle/12.1/client64/lib"
    export LD_LIBRARY_PATH
    

    然后重启zabbix-server

    【讨论】:

    • export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib export LD_LIBRARY_PATH=$ORACLE_HOME,已经添加到/etc/profile,可以用吗?
    【解决方案2】:

    我在我的办公室和亚马逊的 EC2 实例之间连接时遇到了一个非常相似的错误,结果证明这个错误非常具有误导性。具体来说,我的错误是:

    连接错误: ('01000', "[01000] [unixODBC][Driver Manager]Can't 打开 lib '/usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1' : 文件 未找到 (0) (SQLDriverConnect)")

    我们的防火墙是罪魁祸首。更宽松的设置允许成功而没有进一步的问题。

    【讨论】:

      【解决方案3】:

      因为 mysqld daemon 以 mysql 运行用户(不是 root),所以可以使用命令 [ps] 检查

      ps aux | grep -i mysqld
      
      mysql     3129  0.6  5.0 1862256 94272 ?       Ssl  17:52   0:00 /usr/sbin/mysqld
      

      1.将环境变量$LD_LIBRARY_PATH添加到/usr/lib/systemd/system/mariadb.service

      echo "Environment=\"LD_LIBRARY_PATH=$LD_LIBRARY_PATH\"" >> /usr/lib/systemd/system/mariadb.service 
      

      2.重启mariadb.service

      systemctl stop mariadb.service
      systemctl daemon-reload
      systemctl start mariadb.service
      

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2020-03-14
        • 2021-05-01
        • 2018-08-24
        • 2016-07-27
        • 2014-05-24
        • 2014-10-01
        • 2020-04-12
        • 2014-10-14
        • 1970-01-01
        相关资源
        最近更新 更多