2

我有连接到 Oracle 数据库的 perl 脚本,打开一个文本文件并从数据库表中的文件加载数据,该脚本在我的开发机器(windows xp 32 位)上完美运行,但是当我将脚本加载到生产服务器(windows 2003 64 位)并从命令行运行它,它会打开一个 perl.exe - 无法找到组件窗口,消息说

此应用程序无法启动,因为 OCI.dll 未找到。重新安装应用程序可能会解决此问题。

命令行输出为:

install_driver(Oracle) 失败:无法为模块 DBD::Oracle 加载“C:/Perl64/lib/auto/DBD/Oracle/Oracle.dll”:load_file:%1 不是 C:/Perl64 上的有效 Win32 应用程序/lib/DynaLoader.pm 第 191 行。在 (eval 14) 第 3 行编译失败在 (eval 14) 第 3 行的要求中。可能需要的共享库或 dll 没有安装在 c:\warranty\warrantyImport.pl 行的预期位置15

我已经重新安装了 oracle 客户端,我尝试卸载活动 perl 和 oracle 客户端,然后在 perl 之前安装 oracle 客户端,因为听说这可能会导致问题。

我认为这可能是权限,所以我编写了一个简单的 perl 脚本来打开 oci.dll 并在无法打开时引发错误,它能够正确打开它。

我确保 C:\oracle\product\10.2.0\client_1\bin 在 PATH 环境变量中。

我可以使用 SQLPlus 连接到数据库

我已将 OCI.dll 添加到与 perl 脚本相同的目录中。

我现在终于没有想法了....任何人都可以提出任何建议,我正在努力让它发挥作用。

详情 服务器正在运行 ActivePerl 5.14.1 Build 1401(64 位) Oracle 数据库是 10g Oracle 客户端是 10.2.0

4

2 回答 2

3

我有一个类似的问题,但对于 64 位版本的 Perl。我设法通过获取正确的客户端库并阅读本指南来解决它:http:
//www.pythian.com/news/11115/dbdoracle-and-windows-64bit/

基本上,我运行的是 Oracle 11g XE R2,它只有 32 位。所以我怀疑它正在寻找 64 位客户端库,但没有找到它们。于是我下载了:
instantclient-basic-windows.x64-11.2.0.3.0.zip
instantclient-sqlplus-windows.x64-11.2.0.3.0.zip
instantclient-sdk-windows.x64-11.2.0.3.0.zip
来自:
http://www.oracle.com/technetwork/topics/winx64soft-089540.html
并安装到 c:\oracle\instantclient_11_2

我将这些添加到我的路径中:
C:>set PATH = c:\oracleexe\instantclient_11_2;%PATH%
但不幸的是错误仍然存​​在:(

在检查我的 PATH:
echo %PATH%
时,我可以看到该集合被忽略了。我想这是一个权限问题。

所以我编辑了系统路径变量并重新启动了命令提示符。这解决了问题并允许我连接:)

于 2013-01-20T14:56:18.977 回答
2

您是否混合了一些 32 位和 64 位组件。显然,您需要 64 位 Perl、64 位 DBI 和 DBD::Oracle 以及用于 Oracle 客户端的 64 位 dll。我只建议您检查,因为错误显示“不是有效的 Win32 应用程序”。

于 2011-07-27T16:30:02.897 回答