[英]oci_connect connection failed
我在从本地 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
为11克方式说明这里- [//]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 (32bit) 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% 的机会)你想提供给我的任何谷歌链接我已经看过并尝试过......
尽管这个问题可以被视为一个确切的重复这一个-它尚未回答,我想没有人会返回到那个老问题,即使我后我遇到的连接问题太多评论。 还要记住,在那个类似的问题中,返回并询问了不同的错误。
由于一些错误的配置和寻找解决方案的三天时间,我搬到Linux服务器上进行开发,所有问题都消失了。
我发现了什么:
php_oci8.dll
和php_oci8_11g.dll
都取决于Oracle Instant Client库
oci_
函数(例如oci_connect
),仅ociX
函数(例如ociLogon
),这很奇怪。 ORA_HOME
, TNS_ADMIN
,调整后的PATH
以查找即时客户端安装)无济于事 最后,在Linux服务器上,连接到远程Oracle服务器没有问题。 在某个地方(浏览了成千上万个与PHP-Oracle相关的页面时),我发现了一条信息,“不应开发在Windows下连接到Oracle服务器的PHP应用程序”,而应坚持使用UNIX系统。
因此,遇到类似或相同问题的任何人 -善良且不要浪费您的时间,安装VirtualBox,在其上运行Linux并继续前进!
要将php连接到Oracle 11g 11.2版,您需要执行以下操作;
步骤1:使用sys作为sysdba登录到您的数据库并执行以下脚本。
**
execute dbms_connection_pool.start_pool();
execute dbms_connection_pool.restore_defaults();
**
步骤2:在您的PHP脚本中
**
$conn = oci_connect("username", "password", "//hostname/servicename");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
**
注意:i)。 确保启用了PHP_OCI8和PHP_OCI8_11g应用
最好的问候Yasir Hashmi
我遇到了同样的问题,并尝试从本地计算机连接到远程服务器。 经过2个星期的练习,我终于可以使用它了。
该解决方案非常简单,但未在PHP文档中进行记录
因此,让我们来看看提供的示例PHP:
$ conn = oci_connect('hr','welcome','localhost / XE');
他们没有提到的是它指向服务器上的默认端口。
如果将您的计算机设置为其他计算机,则需要指定该计算机。 请参阅下面的新示例:
$ conn = oci_connect('hr','welcome','localhost:1234 / XE');
尝试使用您指定的端口。
希望这可以帮助
只需加两分钱,当我用这个钱把我的头撞在墙上时...如果其他所有方法都失败了,请尝试一下。一旦下载了即时客户端, http://www.oracle.com/technetwork/topics/ winsoft-085727.html ,将其提取的内容复制到apache / bin文件夹中。 它可能会要求您覆盖oci.dll。 这样做,然后重新启动apache / php。 幸运的是,这将解决问题。
祝好运。
我在fedora 17上的解决方案:
1. yum install httpd httpd-devel.
2. yum install php php-mysql php-pear php-devel
3. Install oracle instantclient:
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
4. pecl install oci8
This gives:
**
downloading oci8-1.4.7.tgz ...
Starting to download oci8-1.4.7.tgz (Unknown size)
.....done: 168,584 bytes
10 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Please provide the path to the ORACLE_HOME directory.
Use 'instantclient,/path/to/instant/client/lib' if you're compiling
with Oracle Instant Client [autodetect] :'
**
Just press enter.
5. Enable the OCI8 extension by creating a file, oci8.ini for example, with the following line at /etc/php.d/:
extension=oci8.so
6. service httpd restart
为了记录(PHP 8.0.12),您还可以尝试:
在 Apache bin 文件夹中,复制下一个文件
📁 apache24
....📁 bin
....... 📃oraociei12.dll
....... 📃oci.dll
....... 📃oraons.dll
您可以在 Instant client 文件夹和 bin 文件夹中找到这些文件。
然后重新启动Apache,就是这样。
即时客户端,apache版本和PHP版本必须是或32bits或64bits。
您也可以尝试使用 ez-connection 进行连接(如果您想避免使用 tnsnames)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.