2012-07-10 329 views
17

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

这是我迄今所做的:

  • 平台:RHEL 5.8的64位
  • Perl安装DBI包
  • 安装Oracle即时客户端为Linux 64位(巴斯+ 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

回答

37
  • 安装Perl DBI模块($ yum install perl-DBI
  • 手动安装下面的第三RPM包的Oracle即时客户端(从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_HOMEPATH变量。

  • 下载DBD ::甲骨文CPAN

  • 解压模块和运行,下面给出命令序列:

    perl Makefile.PL 
    make 
    make install 
    

DONE!

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

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

5

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

+0

@gerardw:感谢报告,我只是删除了最后一个斜线,也许是因为发生了GitHub页面升级到Jekyll3和链接格式的变化。 其实我不会假装炒作那个链接,并且 我没有用我的网站赚钱,我喜欢分享我的知识回馈社区,我确信文章 可以帮助其他挣扎的人(像我:)试图安装DBD :: Oracle。 – 2016-02-07 20:36:30

+0

您有可能为12.x更新该文档吗? 12。2至少不包含.mk文件,而“演示”则是构建投诉的内容。为什么CPAN模块不适用于比2014年更新的任何事情? – Otheus 2017-07-19 18:11:12

+0

嗨@Otheus我很抱歉,我最近没有使用Oracle,所以我没有Oracle 12来测试它。文章是为Oracle 11g编写的,但是,我不明白您提到的.mk文件,因为文章说明中没有提及。你到达了哪篇文章的指导步骤?你得到了哪个错误?也许我也可以帮忙。 – 2017-07-24 22:17:14

0

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

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

2

这是我在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 ::甲骨文

cpan> install DBD::Oracle 
+0

适用于12.2 64位,但有警告/错误(Size_t主要与%d格式冲突。)非常感谢 – Otheus 2017-07-19 18:15:55