DBD::Oracle 安装导致错误

Posted

技术标签:

【中文标题】DBD::Oracle 安装导致错误【英文标题】:DBD::Oracle installation causing error 【发布时间】:2014-04-01 00:02:21 【问题描述】:

我想通过 Perl 连接到 Oracle 数据库。为此,我尝试使用以下命令从 CPAN 安装 DBD::Oracle:

[root@localhost Admin]# cpan DBD::Oracle

在我的 Linux 终端上运行上述命令时,我收到以下错误:

[root@localhost Admin]# cpan DBD::Oracle
CPAN: Storable loaded ok (v2.45)
Going to read '/root/.cpan/Metadata'
  Database was generated on Thu, 27 Feb 2014 06:17:02 GMT
Running install for module 'DBD::Oracle'
CPAN: YAML loaded ok (v0.88)
Running make for P/PY/PYTHIAN/DBD-Oracle-1.70.tar.gz
CPAN: Digest::SHA loaded ok (v5.47)
CPAN: Compress::Zlib loaded ok (v2.063)
Checksum for /root/.cpan/sources/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.70.tar.gz ok
DBD-Oracle-1.70/
DBD-Oracle-1.70/lib/
DBD-Oracle-1.70/lib/DBD/
DBD-Oracle-1.70/lib/DBD/Oracle.pm
DBD-Oracle-1.70/lib/DBD/Oracle/
DBD-Oracle-1.70/lib/DBD/Oracle/GetInfo.pm
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Win32.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Vms.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Hpux.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Aix.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Sun.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Macos.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Linux.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Cygwin.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting/Win64.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Troubleshooting.pod
DBD-Oracle-1.70/lib/DBD/Oracle/Object.pm
DBD-Oracle-1.70/oci.def
DBD-Oracle-1.70/Makefile.PL
DBD-Oracle-1.70/MANIFEST
DBD-Oracle-1.70/ocitrace.h
DBD-Oracle-1.70/Changes
DBD-Oracle-1.70/LICENSE
DBD-Oracle-1.70/README.help.txt
DBD-Oracle-1.70/README.mkdn
DBD-Oracle-1.70/INSTALL
DBD-Oracle-1.70/Oracle.xs
DBD-Oracle-1.70/CONTRIBUTORS
DBD-Oracle-1.70/META.json
DBD-Oracle-1.70/oci8.c
DBD-Oracle-1.70/META.yml
DBD-Oracle-1.70/Oracle.h
DBD-Oracle-1.70/dbivport.h
DBD-Oracle-1.70/typemap
DBD-Oracle-1.70/t/
DBD-Oracle-1.70/t/23wide_db_al32utf8.t
DBD-Oracle-1.70/t/00versions.t
DBD-Oracle-1.70/t/22nchar_al32utf8.t
DBD-Oracle-1.70/t/31lob.t
DBD-Oracle-1.70/t/lib/
DBD-Oracle-1.70/t/lib/ExecuteArray.pm
DBD-Oracle-1.70/t/10general.t
DBD-Oracle-1.70/t/28array_bind.t
DBD-Oracle-1.70/t/26exe_array.t
DBD-Oracle-1.70/t/14threads.t
DBD-Oracle-1.70/t/rt74753-utf8-encoded.t
DBD-Oracle-1.70/t/23wide_db.t
DBD-Oracle-1.70/t/22nchar_utf8.t
DBD-Oracle-1.70/t/31lob_extended.t
DBD-Oracle-1.70/t/000-report-versions-tiny.t
DBD-Oracle-1.70/t/12impdata.t
DBD-Oracle-1.70/t/36lob_leak.t
DBD-Oracle-1.70/t/24implicit_utf8.t
DBD-Oracle-1.70/t/38taf.t
DBD-Oracle-1.70/t/21nchar.t
DBD-Oracle-1.70/t/70meta.t
DBD-Oracle-1.70/t/15nls.t
DBD-Oracle-1.70/t/39attr.t
DBD-Oracle-1.70/t/rt85886.t
DBD-Oracle-1.70/t/34pres_lobs.t
DBD-Oracle-1.70/t/56embbeded.t
DBD-Oracle-1.70/t/40ph_type.t
DBD-Oracle-1.70/t/55nested.t
DBD-Oracle-1.70/t/30long.t
DBD-Oracle-1.70/t/32xmltype.t
DBD-Oracle-1.70/t/58object.t
DBD-Oracle-1.70/t/50cursor.t
DBD-Oracle-1.70/t/80ora_charset.t
DBD-Oracle-1.70/t/51scroll.t
DBD-Oracle-1.70/t/01base.t
DBD-Oracle-1.70/t/20select.t
DBD-Oracle-1.70/t/nchar_test_lib.pl
DBD-Oracle-1.70/t/23wide_db_8bit.t
DBD-Oracle-1.70/t/60reauth.t
DBD-Oracle-1.70/t/rt13865.t
DBD-Oracle-1.70/t/25plsql.t
DBD-Oracle-1.70/examples/
DBD-Oracle-1.70/examples/japh
DBD-Oracle-1.70/examples/oradump.pl
DBD-Oracle-1.70/examples/ora_explain.pl
DBD-Oracle-1.70/examples/commit.pl
DBD-Oracle-1.70/examples/bind.pl
DBD-Oracle-1.70/examples/curref.pl
DBD-Oracle-1.70/examples/ex.pl
DBD-Oracle-1.70/examples/read_long_via_blob_read.pl
DBD-Oracle-1.70/examples/tabinfo.pl
DBD-Oracle-1.70/examples/proc.pl
DBD-Oracle-1.70/examples/sql
DBD-Oracle-1.70/examples/mktable.pl
DBD-Oracle-1.70/examples/inserting_longs.pl
DBD-Oracle-1.70/examples/README
DBD-Oracle-1.70/mkta.pl
DBD-Oracle-1.70/Todo
DBD-Oracle-1.70/dbdimp.h
DBD-Oracle-1.70/hints/
DBD-Oracle-1.70/hints/macos_syms.pl
DBD-Oracle-1.70/hints/macos_bundle.syms
DBD-Oracle-1.70/hints/macos_lib.syms
DBD-Oracle-1.70/hints/dgux.pl
DBD-Oracle-1.70/hints/svr4.pl
DBD-Oracle-1.70/dbdimp.c
DBD-Oracle-1.70/README
CPAN: File::Temp loaded ok (v0.22)

  CPAN.pm: Going to build P/PY/PYTHIAN/DBD-Oracle-1.70.tar.gz

Using DBI 1.609 (for perl 5.010001 on x86_64-linux-thread-multi) installed in /usr/lib64/perl5/auto/DBI/

Configuring DBD::Oracle for perl 5.010001 on linux (x86_64-linux-thread-multi)

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

Trying to find an ORACLE_HOME
Your LD_LIBRARY_PATH env var is set to ''

      The ORACLE_HOME environment variable is not set and I couldn't guess it.
      It must be set to hold the path to an Oracle installation directory
      on this machine (or a machine with a compatible architecture).
      See the appropriate README file for your OS for more information.
      ABORTED!

Warning: No success on command[/usr/bin/perl Makefile.PL INSTALLDIRS=site]
  PYTHIAN/DBD-Oracle-1.70.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK
Running make test
  Make had some problems, won't test
Running make install
  Make had some problems, won't install
[root@localhost Admin]#

目前我正在使用 LINUX CentOS。在我的机器上,我已经在使用 SQLDeveloper 连接到 Oracle 数据库,但是我不知道是否设置了 ORACLE_HOME,因为我没有安装那个。

以前有没有人遇到过同样的问题?请告诉我如何解决此错误。

【问题讨论】:

【参考方案1】:

按给定顺序参考这些步骤。

安装 Perl DBI 模块

为 oracle 即时客户端安装低于 3 rpm(来自 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

oracle-instantclient11.2-basic-11.2.0.3.0-1
oracle-instantclient11.2-devel-11.2.0.3.0-1
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1

我使用的是 64 位 linux 机器,因此请相应地选择您的 RPM。

设置以下变量:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

MacOS 用户需要:

DYLD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/

还将ORACLE_HOME 添加到您的PATH 变量中。

从CPAN下载DBD::Oracle

解压模块并按给定顺序运行以下命令:

perl Makefile.PL
make
make install

或者您可以使用cpan 命令安装模块

完成!!!

【讨论】:

你能告诉我如何安装那些 rpm 的吗?? 我的数据库版本是11.2.0.1.0 我的数据库是 Oracle 。为什么我们安装oracle-instantclient11.2-sqlplus-11.2.0.3.0-1这个rpm??你能澄清一下吗?我很困惑 我按照你说的做了,但同样的错误仍然困扰着我 你能在设置环境变量后显示输出吗?这些应该会在安装中有所不同,或者至少在错误消息中有所不同。上面隐藏的其他建议是“安装 DBI”;你已经有了它,但它已经有几转了。尝试先更新该模块。这可能只会影响 DBD::Oracle 的运行时性能,但在尝试安装 DBD::Oracle 之前保持最新状态并没有什么坏处。【参考方案2】:

感谢您的信息!我注意到 oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm 安装到 /usr 中。所以添加这样的软链接可以帮助我解决问题。

sudo ln -s /usr/include/oracle/11.2/client64 $ORACLE_HOME/include

【讨论】:

【参考方案3】:

在安装 DBD:Oracle 之前不要忘记安装 gcc。这也是一个先决条件

【讨论】:

以上是关于DBD::Oracle 安装导致错误的主要内容,如果未能解决你的问题,请参考以下文章

linux centos环境下,perl使用DBD::Oracle遇到报错Can't locate DBDOracle.pm in @INC 的解决办法

含有Oracle变量的Perl脚本

使用Ora2Pg工具把数据从Oracle导入到PostgreSQL

oracle 11gR2 client安装(Red Hat Enterprise Linux Server release 5.5 (Tikanga) 安装ORACLE客户端)

pip升级导致错误 多个pip导致明明已经安装了包但是报no module错误

虚拟盒安装在启动时导致错误