【问题标题】:Perl DBD::Oracle Module installationPerl DBD::Oracle 模块安装
【发布时间】:2019-12-10 21:54:13
【问题描述】:

有人可以指导我如何安装 Perl DBD::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::Oracle 版本是 1.44

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

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

【问题讨论】:

    标签: perl oracle


    【解决方案1】:
    • 如果缺少 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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @gerardw:感谢您的报告,我刚刚删除了最后一个斜杠,可能是因为 GitHub Pages 升级到 Jekyll3 并且链接格式发生了变化。实际上我不假装炒作那个链接,我也没有通过我的网站赚钱,我喜欢分享我的知识来回馈社区,我真的相信这篇文章可以帮助其他挣扎的人(比如我:) 尝试安装 DBD::Oracle。
    • 有没有机会为 12.x 更新该文档? 12.2 至少不包含 .mk 文件,并且“演示”文件是构建抱怨的东西。为什么 CPAN 模块不能用于 2014 年以后的任何更新?
    • 嗨@Otheus 很抱歉,但我最近没有使用Oracle,所以我没有Oracle 12 来测试它。文章是为 Oracle 11g 编写的,但是,我不理解您所指的 .mk 文件,因为文章说明中没有提及。您到达了哪个文章的说明步骤?你得到哪个错误?也许我也可以帮忙。
    • 是的,这些说明缺少有用的信息。有一个.mk 文件,Oracle 使用它来帮助 API 编译器链接并获取所有正确的标头。不幸的是,他们不断在不同的目录结构中移动该文件。最新的列为demo.mk。非常(不那么)明显。 :( 为了让 DBD 模块工作,我只需要将包含 demo.mk 的目录中的文件复制到其父目录。
    • Prolly 最好的选择是在这里举报github.com/pythian/DBD-Oracle/issues
    【解决方案3】:

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

    安装 Oracle Instant Client

    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
    

    【讨论】:

    • 适用于 12.2 64 位,但有警告/错误。 (主要是 size_t 与 %d 格式冲突。)非常感谢
    【解决方案4】:

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

    /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 命令的执行没有任何错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多