DBD :: Oracle:load_file:找不到指定的模块

时间:2017-03-10 19:18:07

标签: windows oracle perl dll

这是一个与时间本身一样古老的故事。不,我不是在谈论一个男人的妻子和他最好的朋友一起逃跑的故事。我正在谈论让DBD::Oracle工作。虽然这两个故事都有与他们相关的痛苦程度。

让我们从事实开始:

  • 运行Windows 7 -64位
  • 运行Strawberry Perl(v.5.16.3 - 32位)(我们有32位的原因是因为有一个模块只有32位而且我们坚持使用它 - 不要问)
  • 成功安装了Oracle客户端(版本12.1.0 - 32位)。
  • 所述Oracle客户端的bin目录已包含在PATH
  • 的前面
  • 添加以下环境变量:

    ORACLE_HOME - 指向Oracle客户端路径
    TNS_ADMIN - 指向Oracle客户端路径
    LD_LIBRARY_PATH - 指向Oracle客户端路径
    ORACLE_USER_ID - 以下列形式设置为有效的oracle用户:user / pass @ system:port \ sid
    ORACLE_SID - 设置为有效的oracle sid

  • 成功将sqlplus连接到所需的数据库。

  • 使用cpanm将DBD :: Oracle成功创建到Strawberry Perl中。虽然我不得不使用--force因为测试失败了。
  • 输入tnsnames.ora的条目,我认为是正确的:

    nameIMadeUp .WORLD =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS =(PROTOCOL = TCP)(HOST = servername )(PORT = port#))     )     (CONNECT_DATA =       (SID = sid )     )   )

在完成所有这些之后,我们尝试运行此代码(为了简洁而剪切):

use DBI;
use DBD::ODBC;
use Log4Perl;

#logger set up here.

my $user = "username";
my $passwd = "password";
my $DSN = "dbi:Oracle:host=servername;sid=sid;port=port#";

my $oracleDbh = DBI->connect($DSN,$user,$passwd) or $logger->logdie("$DBI::errstr\n at line:".__LINE__);

我们得到了这个光荣的错误:

install_driver(Oracle) failed: Can't load 'C:/strawberry/perl/site/lib/auto/DBD/Oracle/Oracle.dll' for module DBD::Oracle: load_file:The specified module could not be found at C:/strawberry/perl/lib/DynaLoader.pm line 190.  
at (eval 84)[C:/strawberry/perl/vendor/lib/DBI.pm:770] line 3. 
Compilation failed in require at (eval 84)[C:/strawberry/perl/vendor/lib/DBI.pm:770] line 3. 
Perhaps a required shared library or dll isn't installed where expected
...stacktrace...

所以,我已经读过'C:/strawberry/perl/site/lib/auto/DBD/Oracle/Oracle.dll'正在查找导致错误的oci.dll。但是oci.dll在[oracle_client_path] / bin /中。从理论上讲,它应该能够找到它。

还是在寻找另一个dll?在Windows或甚至视觉工作室中有工具可以帮助吗?

或者是否有一些我不知道的神奇步骤?

我提前感谢你提出的任何明智的圣人知识。

1 个答案:

答案 0 :(得分:0)

显然,需要重启。重启后,可以通过Perl进行连接。这是为了防止有人像我一样愚蠢。我现在要回AS / 400了......