在zabbix中创建“数据库监视器”项时无法打开lib'/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

时间:2016-08-29 03:30:33

标签: oracle zabbix unixodbc

在此之前,安装了unixODBC

  1. unixODBC.x86_64 2.2.14-14.el6
  2. unixODBC-devel.x86_64 2.2.14-14.el6
  3. 安装的Oracle ODBC驱动程序是:

    1. 甲骨文instantclient11.2碱性-11.2.0.1.0-1.x86_64
    2. 甲骨文instantclient11.2-ODBC-11.2.0.1.0-1.x86_64
    3. 甲骨文instantclient11.2-devel的-11.2.0.1.0-1.x86_64
    4. 和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)
      

      我真的不知道错误意味着什么

3 个答案:

答案 0 :(得分:0)

我的办公室和亚马逊的EC2实例之间出现了非常类似的错误,结果证明该错误非常具有误导性。具体来说,我的错误是:

  

连接错误:(' 01000'," [01000] [unixODBC] [驱动程序管理器]可以&#t; t   打开lib' /usr/lib/oracle/12.1/client64/lib/libsqora.so。 12 .1' :文件   未找到(0)(SQLDriverConnect)")

我们的防火墙是罪魁祸首。更宽松的设置可以在没有进一步问题的情况下取得成功。

答案 1 :(得分:0)

那是因为您的zabbix服务器不知道在哪里查找Oracle lib。 尝试将环境变量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

答案 2 :(得分:0)

由于mysqld守护进程使用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

祝你好运!