2015-11-15 55 views
0

我有一個CGI Perl腳本,它將從Oracle數據庫運行select語句來獲取記錄。這個腳本在Apache上與cgi-bin鏈接運行。它運行良好。從CGI Perl腳本查詢Oracle數據庫時出錯

由於故障轉移,我們將硬盤移至具有類似設置的備份服務器。當我們然而運行腳本,顯示了以下錯誤:

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目錄。我的想法已經枯竭......

任何指針或建議表示讚賞。謝謝。

回答

0

您已經介紹了很好的基礎:確保庫存在,確保您的程序具有讀取/執行權限,併爲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。

+0

謝謝。看起來問題是將'oracle.conf'添加到ldd路徑後,我需要執行'ldconfig'命令來刷新它。運行'ldd'的提示提供了洞察力,謝謝。 – ipohfly