oci_connect():尝试检索文本时出错,错误为 ORA-28547

oci_connect():尝试检索文本时出错,错误为 ORA-28547

我在一台旧服务器上有这个连接字符串,它运行良好并连接到远程 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_HOMEPHP Variables具有没有效果解决问题

反而

您需要添加

env[ORACLE_HOME] = /usr/lib/oracle/18.5/client64/lib

在客户端的php-fpm配置文件中

/etc/php-fpm.d/client.conf

这将ORACLE_HOME在两者下添加PHP VariablesEnvironment修复问题。

在此处输入图片描述

答案2

您的sqlnet.ora设置是否便于连接?(位于$ORACLE_HOME//network/admin)查看Oracle 网络服务文档设置它时,你应该有一行类似以下内容:

NAMES.DIRECTORY_PATH=(ezconnect, tnsnames)

另请参阅故障排除指南

答案3

你有两个问题:

  • Oracle 无法正确转换错误 ORA-28547。这可能是由于安装/配置不正确造成的。您的echo $ORACLE_HOME设置正确吗?
  • 但真正的问题是错误 ORA-28547,即“连接服务器失败”,可能是 Oracle Net 管理错误”。

相关内容