我在从本地 Zend 服务器 CE 连接到外部 ORA DB 11g 时遇到严重问题。OCI8 已启用并运行版本 1.4.6(由于phpinfo()
)。
我尝试了许多连接选项(如下所列),但返回了相同的错误:
oci_connect(): ORA-28547: connection to server failed, probable Oracle Net admin error
在谷歌搜索了一整天后,我只能说这个错误意味着 PHP 能够与服务器通信,但无法连接到具体的服务/数据库,并且错误不应该来自 PHP 本身......
我已将环境变量设置TNS_ADMIN
为包含此连接描述c:\oracle_instantclient_11_2
的文件所在的位置:tnsnames.ora
MYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X)(PORT = 1521))
)
(CONNECT_DATA = (SID = MYDB)(SERVER = DEDICATED))
)
使用此描述
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=X.X.X.X)(PORT=1521)))(CONNECT_DATA=(SID=MYDB)(SERVER=DEDICATED)))
我能够使用sqlplus
控制台连接到服务器和服务/数据库,所以连接非常正确。我也使用相同的 HOST、PORT 和 SID 来使用Sqldeveloper
工具连接到服务器。问题是在 PHP 中连接到服务器时...
到目前为止我尝试了什么:
oci_connect("user", "password", "X.X.X.X:1521", "AL32UTF8", 0);
oci_connect("user", "password", "MYDB", "AL32UTF8", 0);
oci_connect("user", "password", "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=X.X.X.X)(PORT=1521)))(CONNECT_DATA=(SID=MYDB)(SERVER=DEDICATED)))", "AL32UTF8", 0);
上面所有这些oci_connect
调用都返回提到的相同错误。
我也尝试过ezconnect
11g 的方式,如此处所述- [//]host_name[:port][/service_name][:server_type][/instance_name]
:
oci_connect("user", "password", "X.X.X.X:1521/MYDB", "AL32UTF8", 0);
但问题是我不知道service name
,只有service ID
(SID
),因此返回的错误是这样的:
oci_connect(): ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
这表示没有使用提供的服务名称运行的服务(或者 ORA 侦听器不知道此类服务)。
PHP 版本:5.3.14
Appache v.:2.2.22(32 位)Zend
Zend 服务器 CE:5.3.6
OCI8 的 PHP 信息:
OCI8 Support enabled
Version 1.4.6
Revision $Revision: 313688 $
Active Persistent Connections 0
Active Connections 0
Oracle Instant Client Version Unknown
Temporary Lob support enabled
Collections support enabled
Directive Local Value Master Value
oci8.connection_class no value no value
oci8.default_prefetch 100 100
oci8.events Off Off
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics Off Off
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20
也许问题是虽然它的路径在环境变量和环境变量中都设置了unknown
版本...Oracle instant client
TNS_ADMIN
PATH
我的问题是:有人知道我做错了什么吗?我错过了什么吗?我昨天用谷歌搜索了一整天,所以可能(有 99% 的机会)任何谷歌链接你想提供给我我已经看过并尝试过......
虽然这个问题可以被认为是这个问题的完全重复-它还没有得到回答,我想即使我发表评论,也没有人会回到那个旧问题,我也有连接问题。还要记住,在类似的问题中,会返回并询问不同的错误。