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数据库问题】zabbix 连接oracle数据库问题
文章图片

创建一个测试文件把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数据库问题
文章图片

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

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

    推荐阅读