【问题标题】:ocilogon(): ORA-12170: TNS:Connect timeout occurredocilogon(): ORA-12170: TNS: 发生连接超时
【发布时间】:2016-12-04 08:05:36
【问题描述】:

我的配置:

PHP

PHP 5.4.16

OCI8

启用 OCI8 支持 OCI8 DTrace 支持已禁用 OCI8 版本 2.0.11

环境

朗C

PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/instantclient

NOTIFY_SOCKET /run/systemd/notify

ORACLE_HOME /opt/instantclient

LD_LIBRARY_PATH /opt/instantclient

TNS_ADMIN /opt/instantclient/network/admin

XERCES_DISABLE_DTD 1

防火墙

禁用

问题

当我使用 ocilogon 执行 php 页面时:

ocilogon(): ORA-12170: TNS: 发生连接超时

但是如果我尝试 telnet xxxx 1521 我可以连接到 Db

我的php代码:

$test1 = "(DESCRIPTION =
         (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx)(PORT = 1521))
         )
         (CONNECT_DATA = (SERVICE_NAME = yyy))
         )";

$conn=ocilogon(USERNAME,PASSWORD,$test1) or die ("logon problem");

我尝试使用 oci_connect,结果相同。

【问题讨论】:

  • 检查 SQL*Plus 是否可以连接。您的错误指向网络配置问题,可能是入站或出站防火墙。
  • 一些一般的 FYI cmets:(i) 因为您使用的是 Instant Client,所以不需要设置 ORACLE_HOME (ii) 您在 PHP 中使用过时的函数名称。新的就像 oci_connect() (iii) 你可以使用“easy connect”语法来代替旧的、完整的 TNS 字符串。新语法类似于$test = "xxxxxx/yyy"。查看 Oracle 关于 PHP OCI8 的免费书籍:oracle.com/technetwork/topics/php/…
  • 你的评论克里斯托弗。正如我之前所说,我尝试使用 oci_connect,结果相同。
  • 和 firewalld 或 selinux 被禁用。如果我尝试 telnet xxxx 1521 我没有任何问题,我登录到 oracle db

标签: php oci8


【解决方案1】:

找到问题了。

我尝试连接到具有 5 个不同 IP 的 oracle rac。我的网络管理员只允许 5 个中的 4 个。

所以是网络问题,通过 tcpdump 我们找到了问题。

谢谢

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2019-01-21
    • 2015-11-03
    • 2016-07-29
    • 2012-02-03
    • 2019-11-13
    • 2015-05-23
    • 2020-10-10
    相关资源
    最近更新 更多