我遇到了一个问题,我花了几个小时来解决这个问题。这是问题所在:
我正在尝试使用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 是服务器的服务,例如“test”。
显示的错误是
ORA-12514: TNS:listener 当前不知道连接描述符中请求的服务
我可以使用同一个客户端连接到另一个 Oracle 10g 服务器。php 代码是一样的,只是改变 db_user 或 db_pass 或 db_ip。未提供 db_service。
我不将 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 名称:
scblive = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [oracle 8i ip])(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (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,它们都无法工作。我看到了矩阵。似乎即时客户端 8.1.7 或即时客户端 9.0.1 可以同时适用于 oracle 10g 和 oracle 8i。有没有人有这些文件的链接?Oracle 只能提供 10.1.0.5 及更高版本。