在已经运行64位Oracle数据库服务器的Windows Server上安装Oracle 32位客户端

10
我在Windows Server 2008 R2上安装了64位的Oracle Database Server(11.2.0.3),它自动安装了64位客户端。现在我需要在这个服务器上安装一个32位应用程序,但它需要32位Oracle客户端。我已经尝试将32位客户端安装到不同的物理文件夹中,并在安装时选择了不同的Oracle Base和Software Location值,安装成功。32位客户端安装的BIN文件夹已放置在PATH语句的开头。
但是,当我尝试使用32位版本运行“SQLplus system/system”时,它给出“ORA-12560:TNS:协议适配器错误”。当我进入64位sqlplus.exe所在的文件夹并运行它(而不是通过PATH),则“system/system”凭据可以正常工作。
我将Oracle服务器的NETWORK / admin文件夹中的TNSNames文件夹复制到Oracle客户端的NETWORK / admin文件夹中,重新启动服务器。结果相同。
请问如何让32位客户端在与64位Oracle服务器相同的服务器上运行?在Linux / Unix中,只需将lib32文件夹放入64位客户端文件夹中并设置一些环境变量即可,但我很确定在Windows中不那么简单。
如果有方法,请详细描述回答,因为我需要逐步说明。
谢谢您的帮助。

这是一个针对superuser.com的问题。 - Anjan Biswas
如果在连接描述的CONNECT_DATA部分中使用了tnsnames.ora中的"sid",请尝试使用"service_name"代替它。 - Eng. Samer T
2个回答

31

以下是如何在一台计算机上安装32位和64位Oracle客户端的说明。按照说明操作,就应该可以工作。

假设: Oracle Home称为OraClient11g_home1,客户端版本为11gR2

  • 下载并安装Oracle x86 Client,例如安装到C:\Oracle\11.2\Client_x86

  • 下载并安装Oracle x64 Client到不同的文件夹,例如C:\Oracle\11.2\Client_x64

  • 打开命令行工具,转到目录%WINDIR%\System32,通常为C:\Windows\System32,并将符号链接ora112创建到文件夹C:\Oracle\11.2\Client_x64(参见下面的命令部分)

  • 切换到目录%WINDIR%\SysWOW64,通常为C:\Windows\SysWOW64,并创建符号链接ora112到文件夹C:\Oracle\11.2\Client_x86(参见下面)

  • 修改PATH环境变量,用C:\Windows\System32\ora112或其\bin子文件夹替换所有类似C:\Oracle\11.2\Client_x86C:\Oracle\11.2\Client_x64的条目。注意:C:\Windows\SysWOW64\ora112不能在PATH环境中。

  • 如有必要,将您的ORACLE_HOME环境变量设置为C:\Windows\System32\ora112

  • 打开注册表编辑器。将注册表值HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME设置为C:\Windows\System32\ora112。使用C:\Oracle\11.2\Client_x64也���以。

  • 将注册表值HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME设置为C:\Windows\System32\ora112(而不是C:\Windows\SysWOW64\ora112)。使用C:\Oracle\11.2\Client_x86也可以。

  • 完成了!现在您可以无缝地使用x86和x64 Oracle客户端,即x86应用程序将加载x86库,x64应用程序将加载x64库,无需对系统进行任何其他修改。

  • 可能最好将您的TNS_ADMIN环境变量(或注册表中的TNS_ADMIN条目)设置为一个常用位置,例如TNS_ADMIN=C:\Oracle\Common\network\admin

创建符号链接的命令:

cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86

注:

两个符号链接必须具有相同的名称,例如ora112

尽管它们的名称不同,但文件夹C:\Windows\System32包含x64库,而C:\Windows\SysWOW64包含x86(32位)库。不要混淆。

背景信息,为什么这样可以运作:Registry RedirectorFile System Redirector


有没有评论的情况下,对回答进行投票降低评分的原因。万一您不喜欢链接作为答案,我会在此处复制我的文本。 - Wernfried Domscheit
Wernfried,我是这个论坛的新手,如果我意外地对您的评论进行了投票,我很抱歉,但是我不认为我这样做过。但我有一个后续问题。在我的情况下,Oracle 64位服务器(和客户端)已经安装好了。这会有所影响吗?因为看起来你的方法假定没有安装客户端。而且你似乎建议先安装32位客户端再安装64位客户端。而在我这种情况下,这是不可能的。只是不知道这是否会成为问题。非常感谢您的回复。我会尝试一下并看看会发生什么。 - BeekerC
这是一条通用的指令,顺序并不重要。在安装Oracle客户端之后,可以按任意顺序执行每行代码。唯一需要注意的是:32位和64位的客户端必须安装在不同的目录中。 - Wernfried Domscheit
@JeffPearce,感谢您的留言,已经进行了更正。尽管有7个赞,但仍然难以置信没有人注意到这个错误。 - Wernfried Domscheit
1
@Pere 即时客户端只具有 Oracle 客户端中的一小部分功能。如果您想使用 ODBC、ODP.NET、OleDB 等功能,那么您需要按照此答案中提供的步骤进行操作。对于仅使用 ODBC 的情况来说,这可能有些过度。 - undefined
显示剩余3条评论

2

我曾经遇到过同样的问题。在同一台Windows 10机器上安装了32位和64位的ORA客户端(分别在不同的文件夹中),但32位应用程序停止工作了。我所需要做的就是编辑系统环境变量并删除ORACLE_HOME条目,然后重新启动。根据注册表项,Windows/Oracle会自动完成其余操作。只需将tnsnames.ora文件复制到两个安装位置即可。


如何编辑系统环境变量? - Jorge Cornejo Bellido
据我所知,他只是删除了 ORACLE_HOME 环境变量。不过我自己还没有尝试过。 - powerzone3000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接