在 CentOS/RHEL Linux 上设置 Oracle 即时客户端 - 适用于 PHP 和 Perl

在 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() 输出

在此处输入图片描述

现在我的问题和问题是:

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

对于问题 1,要访问远程数据库,ORACLE_SID 无关紧要。只有当客户端和服务器在同一主机上运行时,ORACLE_SID 才有用。有了您的 tnsnames.ora 文件,您应该能够使用以下命令连接到远程数据库:

sqlplus my_user@some_string

你也可以使用

sqlplus my_user/my_password@some_string

但是,我通常不愿意在命令行上提供密码 - 爱管闲事的用户和 ps 命令有时会泄露密码。让数据库提示您输入密码。事实上,我刚刚养成了发出 sqlplus 命令的习惯:

sqlplus /nolog

然后在提示问题

connect my_user/my_password@some_string

并且没有人看到您连接的用户或数据库,而我永远不需要考虑它。

至于问题#2,我无法帮助你。

编辑:

好吧,也许我可以帮忙解决第二个问题。我发现此链接关于使用 DBD 与即时客户端。显然您还必须下载/安装 sdk 即时客户端。请参阅链接中的步骤 3。

答案2

我也遇到了同样的问题。已解决,调整环境变量 ORACLE_HOME,如下所示:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

在 $ORACLE_HOME 内部我有相应的子目录:

垃圾桶 开发工具包

之后我可以安装数据库::Oracle正好。

答案3

1)如果您想省略@connect_string,您可以将TWO_TASK 环境变量设置为名称tnsnames别名(在本例中为some_string)。

在 Windows 上使用 LOCAL 变量可以实现相同的效果。

2) 听起来 sudo 正在重置您的环境变量。您需要将 $ORACLE_HOME 和其他变量添加到 sudoers 文件中的 env_keep 行。将讨论对 sudoers 文件进行的其他更改,这些更改将实现相同的效果这里

相关内容