如何解决 ORA-12154:在 Azure 中使用 PHP OCI8 oci_connect 时出现 TNS 错误

问题描述

我正在尝试连接到新合作伙伴 11g 版本 11.2.0.4.0 的 oracle 数据库,但收到以下错误

警告: oci_connect():ORA-12545:连接失败,因为目标主机或对象不存在

合作伙伴确认提供的连接字符串是正确的。

这是我的 oci_connect() 的当前结构和正在使用的所述连接字符串:

$connection_string = '(DESCRIPTION = (ADDRESS_LIST = (LOAD_BALANCE = ON)(FAIlovER = ON)(ADDRESS = (PROTOCOL = TCP)(HOST = HOST)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = SERVICE_NAME)))'
$conn = oci_connect($username,$password,$connection_string,'UTF8',OCI_DEFAULT);

但是,当使用以下结构时:

$connection_string = 'user/password@host:port/service_name'
$conn = oci_connect($username,OCI_DEFAULT);

它返回:

警告:oci_connect():ORA-12154:TNS:无法解析指定的连接标识符

为了清楚地说明我所做的事情,以下是我创建应用服务和安装 oci8 PHP 驱动程序所采取的步骤:

  1. 我创建了一个 Azure 应用服务,它使用 PHP 版本 7.3.26;
  2. 在 /home/site 中创建一个新的 oracle 目录;
  3. 将 Instant Client 添加到新的 oracle 目录中,在本例中为 Instant Client Linux x86-64 18.5.0.0.0v(基本和 sdk 包);
  4. 继续使用命令 pecl install oci8-2.2.0;
  5. 我在安装过程中指出了instant client的位置,oci8驱动安装成功;
  6. 将新的 oci8.so 文件复制到 /home/site 内的 ext 目录;
  7. 创建了一个 PHP.ini 文件,设置了 extension=/home/site/ext/oci8.so
  8. PHP_INI_SCAN_DIR 配置定义为 /usr/local/etc/PHP/conf.d:/home/site/ini;
  9. 将 LD_LIBRARY_PATH 定义为 /home/site/oracle/instantclient_18_5。

之后,我可以在我的 PHPinfo() 页面上确认 oci8 扩展的存在。

按照本文档执行的步骤:Azure App Service Linux - Adding PHP Extensions

我后来也将 ORACLE_HOME 设置定义为 /home/site/oracle/instantclient_18_5,但没有区别。

我没有想法,有人可以告诉我可能导致此问题的原因以及如何解决


编辑:

在与合作伙伴的进一步对话之后,很明显,考虑到相同的当前配置,我没有办法连接到他们的数据库。正如克里斯托弗·琼斯 (Christopher Jones) 在评论中指出的那样,这是一个网络问题,ORA-12545,ORA-12541,ORA-12514,& ORA-01017 – How to fix for SQL Developer在这种情况下,缺乏适当的反馈。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...