Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Oracle 11即时客户端连接到远程Oracle 8i服务器:ORA-12514错误_Php_Oracle_Oracle Call Interface - Fatal编程技术网

Php Oracle 11即时客户端连接到远程Oracle 8i服务器:ORA-12514错误

Php Oracle 11即时客户端连接到远程Oracle 8i服务器:ORA-12514错误,php,oracle,oracle-call-interface,Php,Oracle,Oracle Call Interface,我遇到了一个问题,我花了几个小时来解决它。问题是: 我正在尝试使用Oracle 11 instant client连接到远程Oracle 8i服务器:以下是我的PHP连接字符串: $conn=oci_connect('db_用户'、'db_通行证'、“db_ip/db_服务”) db_ip是服务器的ip,如“12.34.56.78”。 db_服务是服务器的服务,如“测试” 显示的错误是 ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务 我可以使用同一台客户端连接到另一台Orac

我遇到了一个问题,我花了几个小时来解决它。问题是:

我正在尝试使用Oracle 11 instant client连接到远程Oracle 8i服务器:以下是我的PHP连接字符串:

$conn=oci_connect('db_用户'、'db_通行证'、“db_ip/db_服务”)

db_ip是服务器的ip,如“12.34.56.78”。
db_服务是服务器的服务,如“测试”

显示的错误是

ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务

我可以使用同一台客户端连接到另一台Oracle 10g服务器。php代码是相同的,只更改db_用户或db_pass或db_ip。未提供db_服务

我不将tnsnames.ora用于oracle 10g服务器或oracle 8i服务器。我只是使用服务器的简单IP。这有关系吗

Server using: Windows Server 2008 R2
PHP: php 5.2.17
Oracle Instant Client: 11_2
如有任何意见,将不胜感激

已更新 Php现在也可以工作了。我的php文件夹位于Programfiles(x86)下,不允许使用括号。因此,我将整个文件夹移动到C:\php,并将IIS配置为更改php版本。参考:http://stackoverflow.com/questions/9215983/php-cant-connect-but-sqlplus-can

已更新 非常感谢贾斯汀的帮助。它工作!!!我只是将sid改为scblive而不是scblive。他们的数据库名是scblive。我仍然使用10.2.0.1,使用sqlplus,我可以连接到oracle 10g和oracle 8i。非常感谢

这是适用于oracle 8i的tns名称:

刺耳的= (说明= (地址=(协议=TCP)(主机=[oracle 8i ip])(端口=1521)) (连接数据)= (服务器=专用) (SID=scblive) ) )

在php代码中发现的另一个问题是,它显示了oracle 10g或oracle 8i的相同错误

ORA-12154:TNS:无法解析指定的连接标识符

我刚刚使用了以下连接字符串:

$conn=oci_connect('user_name','pass','scblive')

对于oracle 10g,如果使用与以前相同的连接字符串,则错误仍然显示:

$conn=oci_connect('user_name','pass',[oracle 10g ip])

有什么想法吗

早期更新
谢谢@Justin的帮助。尝试过10.2.0.5、10.2.0.4或10.1.0.0后,它们都无法工作。我看到了矩阵。似乎instant client 8.1.7或instant client 9.0.1可以同时适用于oracle 10g和oracle 8i。有人有这些文件的链接吗?Oracle只能提供10.1.0.5及更高版本。

这是预期的行为。11.2客户端未经认证可连接任何版本的Oracle 8i。您需要至少有一个Oracle 9.2.0.4数据库。如果要连接到和8.1.7数据库,则需要Oracle 10.2或更早版本的客户端。10.2客户端的初始版本与Windows Server 2008 R2系统不兼容,但应该可以安装10.2.0.5客户端补丁集。如果要连接到早于8.1.7的Oracle数据库,则需要早期版本的Oracle客户端,这可能需要安装早期版本的Windows

如果您具有Metalink访问权限,则Metalink 207303.1是首选

如果确实安装了10.2.0.5完整客户端,则TNS别名需要使用SID。服务名称在8.1.7中不存在。您可能希望从能够连接到8.1.7数据库的计算机上复制TNS别名。我猜你想

SCBLIVE = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = [ORACLE 8i IP])(PORT = 1521)) 
    (CONNECT_DATA = (SERVER = DEDICATED)(SID = SCBLIVE)) 
  )

如果不起作用,请在命令行中键入
tnsping scblive
,然后复制并粘贴结果。

我复制以前的Oracle 9/8客户端的ora。。。。文件夹和所有相关的dll连接到一个特定的文件夹,并将这两个文件夹放入path变量中。我曾经成功地使用php中的oci连接到Oracle 8.1.7。

非常感谢。我刚刚安装了instant client 10.2.0.5 win32(我使用的是11.2 32位),但它仍然无法工作。无法加载oci模块“找不到指定的模块”,因此我甚至无法使用此客户端连接oracle 10g。我要求服务器人员让他们检查oracle版本是否为8.1.7或更低版本。@user1631658-您的Windows 2008 R2服务器不是64位的吗?您可能需要64位客户端。我假设Windows Server 2008 R2支持10.2.0.5即时客户端。不过,您可能需要测试完整的客户端安装。刚刚测试过。64位10.2.0.5也不能工作。同样的问题“您的计算机中缺少MSVCR71.DLL”可能会通过将MSVCR71.DLL移动到该文件夹来使用sqlplus,此时可以加载oci模块。但是对于Oracle8i服务器仍然会得到“ORA-12514错误”,对于Oracle10g服务器也会得到“ORA-12514错误”。有什么想法吗?对于完整客户端,我必须安装Oracle 8.1.7或9.01吗?请注意,10.2.0.5是在Windows Server 2008 R2服务器上运行的Oracle客户端的第一个版本(该支持必须是后端口的——最初的目的不是在Windows 2008 R2上支持10.2客户端)。如果您想要Oracle客户端的早期版本,则需要在服务器上安装不同版本的Windows。然后,您可以向Oracle提交支持请求,以获取该软件的旧版本。即时客户端产品也是相对较新的——如果您想要8.1.7或9.0.1客户端,它需要是完整客户端。