我在从本地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
次调用都会返回相同的错误。
我已经按照here - ezconnect
[//]host_name[:port][/service_name][:server_type][/instance_name]
的{{1}}方式尝试了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
),因此返回的错误是:
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
表示没有提供服务名称的服务运行(或者ORA监听器不知道此类服务)。
PHP版本:5.3.14
Appache v。:2.2.22(32bit)Zend
Zend服务器CE:5.3.6
OCI8的PHP信息:
unknown
可能问题是Oracle instant client
版TNS_ADMIN
虽然它的路径是在PATH
和{{1}}环境变量中设置的......
我的问题是:有人知道我做错了什么吗?我错过了什么吗?我昨天用谷歌搜索了一整天,很可能(有99%的几率)任何谷歌链接你想提供给我的我已经看过并试过......
虽然这个问题可以被认为是一个完全重复的of this one - 它还没有得到回答,我想即使我发表评论我也没有回到那个老问题我也有连接问题。 另请注意,在该类似问题中,会返回并询问不同的错误。
答案 0 :(得分:4)
由于在寻找解决方案时出现了一些错误配置和3天的丢失,我转而在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并继续前进!
答案 1 :(得分:2)
将php连接到Oracle 11g版本11.2,您需要执行以下操作;
步骤1: 使用sys as sysdba登录到db并执行以下脚本。
**
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 :(得分:1)
我遇到了同样的问题,并尝试从本地计算机连接到远程服务器。 经过两周的努力,我终于开始工作了。
解决方案非常简单,但未在PHP文档中记录
所以让我们拿PHP提供的示例:
$ conn = oci_connect('hr','welcome','localhost / XE');
他们没有提到的是它指向服务器上的默认端口。
如果您的设置不同,则需要指定。 请参阅下面的新示例:
$ conn = oci_connect('hr','welcome','localhost:1234 / XE');
尝试使用指定的端口。
希望这有帮助
答案 3 :(得分:1)
只需添加我的两分钱,因为我用这个将我的头靠在墙上......如果一切都失败了,试试这个,一旦你下载了即时客户端,http://www.oracle.com/technetwork/topics/winsoft-085727.html,就把它复制一下。将内容提取到apache / bin文件夹。它可能会要求你覆盖oci.dll。这样做,然后重启apache / php。幸运的是,这将解决问题......
祝你好运。答案 4 :(得分:0)
我对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