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


Oracle 11 instant client connect to remote Oracle 8i server: ORA-12514 error

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

我正试图使用Oracle 11即时客户端连接到远程Oracle 8i服务器:这是我在PHP中的连接字符串:

$conn=oci_connect('db_user','db_pass',"db_ip/db_service");

db_ip是服务器的ip,例如"12.34.56.78"。
db_service是服务器的服务,例如"测试"。

显示的错误为

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

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

无论是Oracle10g服务器还是Oracle8i服务器,我都不使用tnsnames.ora。我只是使用服务器的简单IP。这有关系吗?

Server using: Windows Server 2008 R2
PHP: php 5.2.17
Oracle Instant Client: 11_2

任何想法都将不胜感激。

更新博士现在也可以工作了。我的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,我可以连接到oracle10g和oracle8i。非常感谢!!

这是适用于oracle8i:的tns名称

scblive=(说明=(ADDRESS=(PROTOCOL=TCP)(HOST=[oracle 8i ip])(PORT=1521))(连接数据=(服务器=专用)(SID=scblive)))

在php代码中发现的另一个问题是,它显示了oracle10g或oracle8i的相同错误。

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

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

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

对于oracle10g,如果我使用了和以前相同的连接字符串,错误仍然显示:

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

有什么想法吗?

Earilier更新:感谢@Justin的帮助。已经尝试过10.2.0.5、10.2.0.4或10.1.0.0,但都不起作用。我看到了矩阵。即时客户端8.1.7或即时客户端9.0.1似乎可以同时适用于oracle10g和oracle8i。有人有这些文件的链接吗?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到一个特定的文件夹,并将这两个文件夹放入路径变量中。有一次,我成功地使用php中的oci连接到了Oracle8.1.7。