【发布时间】:2017-08-01 06:08:01
【问题描述】:
这是一个与时间本身一样古老的故事。不,我不是在谈论一个男人的妻子和他最好的朋友私奔的故事。我说的是让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 的条目,我认为是正确的:
nameIMakeUp.WORLD = (描述= (地址列表 = (地址 = (协议 = TCP)(主机 = 服务器名)(端口 = 端口#)) ) (连接数据 = (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 甚至 Visual Studio 中是否有可以提供帮助的工具?
或者我错过了什么神奇的步骤?
我提前感谢您提出的任何明智的圣人知识。
【问题讨论】: