我在一台旧服务器上有这个连接字符串,它运行良好并连接到远程 oracle 服务器。
在此新服务器上,我安装了 oracle instant client simple 和 devel 以及 php pecl oci8。下面是 oci8 的屏幕截图。
这是我用来连接的代码
$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" . $ORACLE_HOST . ")(PORT=" . $ORACLE_PORT . ")))(CONNECT_DATA=(SID=" . $ORACLE_DB . ")))";
$this->dbh = oci_connect($ORACLE_USER, $ORACLE_PASS, $db);
但是当我尝试连接到 Oracle 时出现此错误
oci_connect(): Error while trying to retrieve text for error ORA-28547
如果我输入一个随机主机名,我会得到一个ORA-12154
有意义的错误 如果我输入一个随机 SID,我会得到ORA-12514
一个有意义的错误 如果我输入一个随机端口,我会得到一个ORA-12545
有意义的错误 如果我输入nc
服务器和端口,我会得到这个结果
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.10.40.21:1521.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
我使用的系统是 Centos 7 64位,php 5.6
有人知道为什么会发生这种情况吗?
答案1
似乎尽管phpinfo
可以检测到 oracle 客户端版本 18.5,但无法获取ORACLE_HOME
目录
如果你只设置
SetEnv ORACLE_HOME "/usr/lib/oracle/18.5/client64/lib"
在客户端的虚拟主机配置文件中
/etc/httpd/conf/sites-available/client.vhost
这仅添加ORACLE_HOME
到PHP Variables
具有没有效果解决问题
反而
您需要添加
env[ORACLE_HOME] = /usr/lib/oracle/18.5/client64/lib
在客户端的php-fpm
配置文件中
/etc/php-fpm.d/client.conf
这将ORACLE_HOME
在两者下添加PHP Variables
并Environment
修复问题。
答案2
您的sqlnet.ora
设置是否便于连接?(位于$ORACLE_HOME//network/admin
)查看Oracle 网络服务文档设置它时,你应该有一行类似以下内容:
NAMES.DIRECTORY_PATH=(ezconnect, tnsnames)
另请参阅故障排除指南。
答案3
你有两个问题:
- Oracle 无法正确转换错误 ORA-28547。这可能是由于安装/配置不正确造成的。您的
echo $ORACLE_HOME
设置正确吗? - 但真正的问题是错误 ORA-28547,即“连接服务器失败”,可能是 Oracle Net 管理错误”。