php7无法连接到oracle池连接

时间:2018-02-13 13:09:41

标签: oracle11g connection-pooling php-7 oci8

这在cli和非池化连接上运行正常。当我在cli上尝试以下内容时,它可以正常工作

sqlplus CCP/"***"@DECCP1ST_POOLED.test.vis

但是当我尝试在php中执行此操作时会抛出错误

$c = oci_connect('CCP', "***", 'domain.com:33001/DECCP1ST_POOLED.test.vis');
print_r($c);

输出

Warning: oci_connect(): ORA-12514: TNS:listener does not currently know of service requested in connect descriptor in

在我的tnsnames.ora中我有

DECCP1ST_POOLED.test.vis =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = domain.com)(PORT = 33001))
    (CONNECT_DATA =
      (SERVER = POOLED)
      (SERVICE_NAME = DECCP1ST.test.vis)
    )
  )

我已关注此pdf。我已设置oci8.connection_class = SHARED

1 个答案:

答案 0 :(得分:1)

根据您在问题中链接的PDF,第15页:

  

PHP应用程序必须在连接字符串中指定服务器类型POOLED   使用DRCP。使用Oracle的Easy Connect语法,连接到sales上的myhost数据库的PHP调用如下所示:

$c = oci_pconnect('myuser', 'mypassword', 'myhost/sales:POOLED');

根据以上内容以及您的TNS字符串,您需要在脚本中使用以下内容:

$c = oci_connect('CCP', '***', 'domain.com:33001/DECCP1ST.test.vis:POOLED');

请注意,您在此处使用Easy Connect语法,因此忽略了TNSNAMES.ORA文件。因此,您必须使用定义的SERVICE_NAMEDECCP1ST.test.vis)而不是TNS别名(DECCP1ST_POOLED.test.vis)!