这是一个与时间本身一样古老的故事。不,我不是在谈论一个男人的妻子和他最好的朋友一起逃跑的故事。我正在谈论让DBD::Oracle
工作。虽然这两个故事都有与他们相关的痛苦程度。
让我们从事实开始:
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或甚至视觉工作室中有工具可以帮助吗?
或者是否有一些我不知道的神奇步骤?
我提前感谢你提出的任何明智的圣人知识。
答案 0 :(得分:0)
显然,需要重启。重启后,可以通过Perl进行连接。这是为了防止有人像我一样愚蠢。我现在要回AS / 400了......