这在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
答案 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_NAME
(DECCP1ST.test.vis
)而不是TNS别名(DECCP1ST_POOLED.test.vis
)!