Perl DBD :: Oracle模块安装

时间:2012-07-10 06:04:38

标签: perl oracle

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

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

  • 平台:RHEL 5.8 64位
  • 已安装的Perl DBI包
  • 已安装适用于Linux 64位的Oracle Instant Client(即时客户端的basi + 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

4 个答案:

答案 0 :(得分:40)

  • 安装Perl DBI模块($ yum install perl-DBI
  • 为Oracle即时客户端手动安装以下三个RPM(来自Instant Client Downloads for Linux x86-64

    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
    

完成!!!

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

这是我使用yum软件包和CPAN在CentOS 7.2上所做的。这假设您使用的是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

答案 3 :(得分:0)

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

protected override void LoadContent()
{            
     spriteBatch = new SpriteBatch(GraphicsDevice);
     myModel = Content.Load<Model>("http://mywebservice.com/getXNBModel/1/");
}

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

/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

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

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