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

我试图设置一个CentOS 5.5 / 64位虚拟机来访问远程Oracle数据库与PHP和Perl脚本。 (我对Oracle没有经验,以前只编写和pipe理过一些PostgreSQl和MySQL。)

我已经安装了以下Oracle Instant Client rpms:

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 

并添加了以下variables到我的.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从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()输出: http : //i.stack.imgur.com/AylJG.png

现在我的问题和问题请:

1)如何设置ORACLE_SIDvariables以及如何在设置后调用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命令有时可以将其提供。 让数据库提示你input密码。 实际上,我刚刚习惯于这样发布sqlplus命令:

 sqlplus /nolog 

然后在提示问题

 connect my_user/my_password@some_string 

甚至没有人看到你连接的用户或数据库,我从来没有想过。

至于问题2,不能帮助你。

编辑:

那么,也许我可以帮助#2。 我发现这个链接与即时客户端使用DBD 。 显然你必须下载/安装SDK即时客户端。 请参阅链接中的第3步。

我有同样的问题。 求解调整variablesORACLE_HOME,如下所示:

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

而在$ ORACLE_HOME里面我有各自的子目录:

bin lib sdk

之后,我可以安装DBD :: Oracle就好了。

1)如果你想离开@connect_string,你可以设置TWO_TASK环境variables为名字tnsnames别名(在本例中为some_string)。

在windows上使用LOCALvariables也是一样的。

2)听起来像sudo重置您的环境variables。 您需要将$ ORACLE_HOME和其他人添加到sudoers文件中的env_keep行。 在这里讨论其他将改变同样事情的sudoers文件。