1

DBI 経由で Oracle に接続しようとしていますが、うまくいきません。

私のセットアップ:

# cat /proc/version 
Linux version 2.6.18-194.el5 (mockbuild@ca-build10.us.oracle.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Mon Mar 29 20:06:41 EDT 2010
# uname -i 
i386
# perl -v 
This is perl, v5.8.8 built for i386-linux-thread-multi 
<...>
# echo $ORACLE_HOME
/usr/lib/oracle/12.1/client

このスクリプトを使用して接続しようとしています:

#!/usr/bin/perl
# dbi.pl
use warnings;
use strict;
use DBI;

$ENV{ORACLE_HOME}="/usr/lib/oracle/12.1";
$ENV{LD_LIBRARY_PATH}="/usr/lib/oracle/12.1/client/lib";
$ENV{NLS_LANG}="american_america.CL8MSWIN1251";

my $user='user';
my $pw='pw';
my $host='servername';
my $port='1521';
my $SID = 'SID';
my $source = "dbi:Oracle:$host;sid=$SID;port=$port";

my $dbh=DBI->connect($source,$user,$pw,{PrintError=>0,AutoCommit=>0,RaiseError=>1}) or die "Oracle:$DBI::errstr\n";

そして、それを実行しようとすると、エラーが発生します:

#  ./dbi.pl
install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 3) line 3.
Perhaps the DBD::Oracle perl module hasn't been fully installed,
or perhaps the capitalisation of 'Oracle' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge, mysql.
 at ./dbi.pl line 21

DBD-Oracle を再インストールしようとしました:

root@hostname:/tmp/DBD-Oracle-1.66# perl Makefile.PL
Using DBI 1.52 (for perl 5.008008 on i386-linux-thread-multi) installed in /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/DBI/

Configuring DBD::Oracle for perl 5.008008 on linux (i386-linux-thread-multi)

Remember to actually *READ* the README file! Especially if you have any problems.

Installing on a linux, Ver#2.6
Using Oracle in /usr/lib/oracle/12.1/client
DEFINE _SQLPLUS_RELEASE = "1201000100" (CHAR)
Oracle version 12.1.0.1 (12.1)

        Unable to locate an oracle.mk or other suitable *.mk
        file in your Oracle installation.  (I looked in
        /usr/lib/oracle/12.1/client/rdbms/demo/demo_xe.mk /usr/lib/oracle/12.1/client/rdbms/demo/demo_rdbms32.mk /usr/lib/oracle/12.1/client/rdbms/demo/demo_rdbms.mk /usr/lib/oracle/12.1/client/rdbms/lib/ins_rdbms.mk /usr/share/oracle/12.1/client/demo.mk under /usr/lib/oracle/12.1/client)

        The oracle.mk (or demo_rdbms.mk) file is part of the Oracle
        RDBMS product.  You need to build DBD::Oracle on a
        system which has one of these Oracle components installed.
        (Other *.mk files such as the env_*.mk files will not work.)
        Alternatively you can use Oracle Instant Client.

        In the unlikely event that a suitable *.mk file is installed
        somewhere non-standard you can specify where it is using the -m option:
                perl Makefile.PL -m /path/to/your.mk

        See the appropriate README file for your OS for more information and some alternatives.

     at Makefile.PL line 1187.
root@hostname:/tmp/DBD-Oracle-1.66#  ls /usr/lib/oracle/12.1/client/
total 8.0K
drwxr-xr-x 2 root root 4.0K Sep 24 13:23 bin/
drwxr-xr-x 2 root root 4.0K Sep 24 13:23 lib/
root@hostname:/tmp/DBD-Oracle-1.66#  

したがって、インスタントクライアントをインストールしたため、この「rdbms」ディレクトリはありません。データベースをインストールせずに動作させる方法はありますか?

4

3 に答える 3

1

最近のフル Oracle データベースのインストールでは、DBD::Oracle に必要なすべてのビットがインストールされません。申し訳ありませんが、取り付ける必要があるオプションビットの名前を思い出せません。ただし、別の方法 (およびはるかに簡単な方法) は、Oracle インスタント クライアントの「basic」、「sdk」、および「sqlplus」をダウンロードし、それらをどこかに解凍して、LD_LIBRARY_PATH を指定することです。また、DBD::Oracle の再構築について考える必要がないことを意味する、現在の Oracle データベースのインストールから独立させます。

ところで、perl スクリプトで LD_LIBRARY_PATH を設定しても機能しません。手遅れです。

于 2013-10-24T09:01:51.423 に答える
0

こんにちは、設定しましたLD_LIBRARY_PATHか?docsによると、 Makefile.PL は現在インスタントクライアントで動作するはずですが、これはあなたがフォローしていない(または少なくともフォローしていることを示している)唯一のオプションです。

于 2013-10-16T14:43:20.233 に答える