Php Oracle 11即时客户端连接到远程Oracle 8i服务器:ORA-12514错误
我遇到了一个问题,我花了几个小时来解决它。问题是: 我正在尝试使用Oracle 11 instant client连接到远程Oracle 8i服务器:以下是我的PHP连接字符串: $conn=oci_connect('db_用户'、'db_通行证'、“db_ip/db_服务”) db_ip是服务器的ip,如“12.34.56.78”。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
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客户端,它需要是完整客户端。