zabbix 连接oracle数据库问题

错误提示:
    Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries in ......
    Warning: oci_connect(): Error while trying to retrieve text for error ORA-01804 in ......
    connection failed

提示说是Oracle客户端依赖库路劲有问题。

网上的解决方法大多都说是没有配置环境变量,配置完oracle环境变量基本上能解决。

确实,一般情况下配置完oracle环境变量可以解决问题。但在非一般情况下就难说了。

0x00、问题来源

    zabbix服务器迁移完,打开zabbix web,连接不上oracle,没有具体错误提示。

zabbix 连接oracle数据库问题_第1张图片

    创建一个测试文件把zabbix连接oracle数据库的代码copy过来,然后通过浏览器访问该测试文件,可以看到错误信息了。如下:
    Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries in ......
    Warning: oci_connect(): Error while trying to retrieve text for error ORA-01804 in ......
    connection failed
    该错误信息表示连接oracle失败,可能是系统oracle动态库路径的问题。
    但仔细检查oracle动态库路径,系统上的环境变量没有问题,用sqlplus连接oracle,可以连接上。
    折腾了很久,一直没找到解决方法。
    最后用strace命令调试apache进程,找到了问题所在,成功解决问题。

0x02、解决方法与过程

    httpd是Apache超文本传输协议(HTTP)服务器的主程序,可以使用:-X 参数启动以调试模式运行httpd。
    在命令终端启动调试apache的httpd:
    httpd -X -k start
    打开另一个终端:strace -p http进程pid
    ps -ef | grep httpd
    strace -p 7270

    在浏览器访问zabbix测试文件(上面说的自己编写的php)
    接下来在执行strace命令的终端可以看到调试信息。

zabbix 连接oracle数据库问题_第2张图片

    在调试过程中发现其需要的文件
    oracore/
    rdbms/
    nls/
    这三个目录是不存在的。
    最后解决方法就是从其他服务器把这些需要的文件copy过来。

0x03、后记

    最后问题解决了,但其中有些疑问:
        连接oracle数据库,问什么有些不需要上述的文件,有些需要呢?

你可能感兴趣的:(linux服务器监控)