23

有人可以指导我如何安装 PerlDBD::Oracle模块吗?

这是我到目前为止所做的:

  • 平台:RHEL 5.8 64 位
  • 安装 Perl DBI 包
  • 安装了适用于 64 位 Linux 的 Oracle Instant 客户端(用于 Instant 客户端的基本 + sdk + sqlplus 组件
  • 已设置正确$ORACLE_HOME$LD_LIBRARY_PATH
  • 然后当我这样做perl Makefile.pl时失败并出现以下错误:

    I'm having trouble finding your Oracle version number... trying harder
    
    WARNING: I could not determine Oracle client version so I'll just
    default to version 8.0.0.0. Some features of DBD::Oracle may not work.
    Oracle version based logic in Makefile.PL may produce erroneous results.
    You can use "perl Makefile.PL -V X.Y.Z" to specify a your client version.
    
    Oracle version 8.0.0.0 (8.0)
    DBD::Oracle no longer supports Oracle client versions before 9.2
     Try a version before 1.25 for 9 and 1.18 for 8! at Makefile.PL line 271.
    
  • 即时客户端版本:11.1.0

  • 版本是DBD::Oracle1.44

如果您已使用 Oracle 即时客户端成功安装,那么您能否告诉我我缺少什么?

是否可以在DBD::Oracle不使用 Oracle 即时客户端的情况下进行安装?

4

4 回答 4

46
  • 如果缺少 ExtUtils-MakeMaker 模块,请安装 ( sudo yum install perl-ExtUtils-MakeMaker)
  • 安装 Perl DBI 模块 ( $ yum install perl-DBI)
  • 为 Oracle 即时客户端手动安装以下三个 RPM(来自Instant Client Downloads for Linux x86-64。示例适用于 v11.2.0.3.0-1:将以下命令调整为实际版本。)

    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 文件名。应该做的事情sudo yum -y install oracle-instantclient*rpm

  • 设置以下变量:

    export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
    export 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
    sudo make install
    

如果您收到有关缺少 gcc 的投诉,您可以(暂时)安装它,然后将其删除。

完毕 !!!

我遇到的问题是由于错误的LD_LIBRARY_PATH。我已将其设置为,/usr/lib/oracle/11.2/client64而正确的值为/usr/lib/oracle/11.2/client64/lib.

当然,对于像我这样的新手来说,这是一个很好的学习。

于 2012-07-10T06:54:18.047 回答
6

您还可以阅读我的文章如何安装 DBD::Oracle,其中包含安装 DBD::Oracle CPAN 模块所需的所有步骤,这不是一个简单的安装。目的是减少头痛并将其转变为可重复的过程。

于 2014-12-22T15:34:47.130 回答
3

这是我在 CentOS 7.2 上使用 yum 包和 CPAN 所做的。这假设您使用的是 Oracle 12.1 版,但我想大多数版本都会以这种方式工作。

安装 Oracle 即时客户端

yum install oracle-instantclient12.1-basic-12.1.0.2.0-1 oracle-instantclient12.1-devel-12.1.0.2.0-1 oracle-instantclient12.1-sqlplus-12.1.0.2.0-1

复制演示制作文件

安装预计 *.mk 文件位于 /usr/share/oracle/12.1/client64,但 yum 包安装将它们放在 /usr/share/oracle/12.1/client64/demo 中。

sudo cp /usr/share/oracle/12.1/client64/demo/* /usr/share/oracle/12.1/client64

修改.bashrc

将以下行添加到您的 ~/.bashrc

export ORACLE_HOME=/usr/lib/oracle/12.1/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
export PATH=$ORACLE_HOME:$PATH

现在源文件

source ~/.bashrc

更新 CPAN 和 DBI

将 CPAN 和 DBI 更新到最新版本

cpan> install CPAN
cpan> reload cpan
cpan> install DBI

安装 DBD::Oracle

cpan> install DBD::Oracle
于 2017-07-11T15:02:59.230 回答
0

对 slayedbylucifer 答案的一点补充。我遇到了与问题中提到的相同的问题。我已经完成了 slayedbylucifer 描述的所有步骤。但我仍然遇到了这里提到的问题:

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /opt/oracle/app/oracle/product/11.2.0/client_1/lib//libclntsh.so when searching for -lclntsh
/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lclntsh

所以我创建了以下符号链接:

ln -s /opt/oracle/app/oracle/product/<YOUR_ORACLE_VERSION>/client_1/lib/libclntsh.so $ORACLE_HOME/libclntsh.so*

在那一步之后,上面的错误(找不到-lclntsh)得到了修复。make 命令的执行没有任何错误。

我唯一的问题是我不明白为什么这个符号链接是必要的。

于 2015-09-28T09:11:06.773 回答