在 CentOS/RHEL Linux 上設置 Oracle 即時客戶端 - 用於 PHP 和 Perl
我正在嘗試設置一個 CentOS 5.5/64 位 VM 以使用 PHP 和 Perl 腳本訪問遠端 Oracle 數據庫。(我沒有使用 Oracle 的經驗,之前只程式和管理過一些 PostgreSQl 和 MySQL。)
我安裝了以下 Oracle Instant Client rpm:
oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm
並將以下變數添加到我的 .bash_profile 中:
export TNS_ADMIN=/etc export ORACLE_HOME=/usr/lib/oracle/11.2 export LD_LIBRARY_PATH=$ORACLE_HOME/client64/lib PATH=$PATH:$HOME/bin:/sbin:$ORACLE_HOME/client64/bin
我在文件
/etc/tnsnames.ora
中寫入了從執行 Oracle 數據庫的遠端站點的同事那裡收到的資訊:some_string = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = my_address)(PORT = my_port)) ) (CONNECT_DATA = (SERVICE_NAME = PDTT) ) )
好的部分是我現在可以通過執行從 CLI 連接
sqlplus 'my_user/my_password@//my_address:my_port/PDTT'
然後可以通過發出以下命令查看一些表:
select table_name from user_tables;
而且我已經
sudo pecl install oci8
成功執行,添加了包含以下內容的文件/etc/php.d/oci8.ini
:extension=oci8.so
並且可以看到以下 phpinfo() 輸出
現在我的問題和問題請:
- 我應該如何設置 ORACLE_SID 變數以及設置後如何呼叫 sqlplus?我可以/應該使用 PHP 和 Perl 腳本中的 ORACLE_SID 嗎?
2)我執行
sudo -E perl -MCPAN -e shell
並且在安裝其他 Perl 模組時執行良好,但是對於“安裝 DBD::Oracle”它失敗了:CPAN.pm: Going to build T/TI/TIMB/DBD-Oracle-1.26.tar.gz Using DBI 1.52 (for perl 5.008008 on x86_64-linux-thread-multi) installed in /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/ Configuring DBD::Oracle for perl 5.008008 on linux (x86_64-linux-thread-multi) Remember to actually *READ* the README file! Especially if you have any problems. The ORACLE_HOME environment variable value (/usr/lib/oracle/11.2) is not valid. It must be set to hold the path to an Oracle installation directory on this machine (or a machine with a compatible architecture). For an Instant Client install, the directory should include an sdk subdirectory. See the appropriate README file for your OS for more information. ABORTED! Running make test Make had some problems, maybe interrupted? Won't test Running make install Make had some problems, maybe interrupted? Won't install
它在上面提到了“sdk”目錄,但 rpm 根本沒有那個目錄:
# rpm -ql oracle-instantclient11.2-devel | grep -i sdk #
感謝您提供的任何提示以及有關 Oracle 安裝和使用的任何有用提示。那裡有很多 Oracle 資訊,但它通常假定 Oracle 安裝在同一台機器上。
對於問題 #1,要訪問遠端數據庫,ORACLE_SID 是無關緊要的。ORACLE_SID 僅在客戶端和伺服器在同一主機上執行時才有用。給定您的 tnsnames.ora 文件,您應該能夠使用以下命令連接到遠端數據庫:
sqlplus my_user@some_string
你也可以使用
sqlplus my_user/my_password@some_string
但是,我通常會避免在命令行上提供密碼 - snoopy 使用者和 ps 命令有時會洩露密碼。讓數據庫提示您輸入密碼。事實上,我剛剛養成了這樣發出 sqlplus 命令的習慣:
sqlplus /nolog
然後在提示問題
connect my_user/my_password@some_string
甚至沒有人看到您連接到的使用者或數據庫,我永遠不必考慮它。
至於問題2,幫不了你。
編輯:
好吧,也許我可以幫忙解決#2。我發現這個連結使用 DBD 和即時客戶端。顯然您也必須下載/安裝 sdk 即時客戶端。請參閱連結中的第 3 步。