Perl脚本引发oci.dll错误,DBD

时间:2011-07-27 15:57:56

标签: windows perl oci dbd

我有perl脚本连接到Oracle数据库,打开文本文件并从数据库表中的文件加载数据,该脚本在我的开发机器上完美运行(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不是有效的Win32应用程序   C:/Perl64/lib/DynaLoader.pm第191行(eval 14)第3行编译   failde in require at(eval 14)line 3.也许是必需的共享   library或dll isn; t installde所在的位置   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

2 个答案:

答案 0 :(得分: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:\ oraclexe \ instantclient_11_2

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

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

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

答案 1 :(得分:1)

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