从 CGI Perl 脚本查询 Oracle 数据库时出错

Error querying Oracle database from CGI Perl script

我有一个 CGI Perl 脚本,它将 运行 来自 Oracle 数据库的 select 语句来获取记录。此脚本 运行s 在 Apache 上与 cgi-bin 链接。 运行宁晴。

由于故障转移,我们将硬盘移动到具有类似设置的备份服务器。但是,当我们 运行 脚本时,会显示以下错误:

install_driver(Oracle) failed: Can't load '/u02/system/perl/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at /u02/system/perl/usr/lib64/perl5/DynaLoader.pm line 200.

我检查了我的 ORACLE_HOMELD_LIBRARY_PATH 变量,它们都指向正确的 oracle 客户端。也尝试 locate libclntsh.so.11.1 并设法在正确的目录中找到文件,并获得许可。

还添加了一个 oracle.conf 文件,该文件具有 /etc/ld.so.conf.d

中 oracle lib 目录的路径

所有这些,但它仍然显示相同的错误。我 运行 没主意了....

如有任何指点或建议,我们将不胜感激。谢谢。

您已经涵盖了很好的基础知识:确保库存在,确保您的程序具有 read/execute 权限,并为 ORACLE_HOME 和 LD_LIBRARY_PATH 设置环境变量.

你们很多人需要递归地检查依赖关系。

ldd /u02/system/perl/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so

应该向您显示无法加载的 .so 的任何依赖项。 DBD::Oracle 对 Oracle 客户端也是版本敏感的。如果 Oracle 客户端的版本或位置已更改(或当所有其他方法都失败时),您可能需要重新编译 DBD::Oracle.