Php

在 CentOS/RHEL Linux 上設置 Oracle 即時客戶端 - 用於 PHP 和 Perl

  • December 9, 2017

我正在嘗試設置一個 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() 輸出

在此處輸入圖像描述

現在我的問題和問題請:

  1. 我應該如何設置 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 步。

引用自:https://serverfault.com/questions/209570