使用Perl与Oracle

3

我一整天都在尝试安装perl-DBD-Oracle-1.19-1.el5.x86_64.rpm软件包,但是它一直报以下错误:

perl-DBD-Oracle-1.19-1.el5.x86_64 from /perl-DBD-Oracle-1.19-1.el5.x86_64 has depsolving problems
  --> Missing Dependency: libnnz10.so()(64bit) is needed by package perl-DBD-Oracle-1.19-    1.el5.x86_64 (/perl-DBD-Oracle-1.19-1.el5.x86_64)
perl-DBD-Oracle-1.19-1.el5.x86_64 from /perl-DBD-Oracle-1.19-1.el5.x86_64 has depsolving problems
  --> Missing Dependency: libocci.so.10.1()(64bit) is needed by package perl-DBD-Oracle-1.19-1.el5.x86_64 (/perl-DBD-Oracle-1.19-1.el5.x86_64)
perl-DBD-Oracle-1.19-1.el5.x86_64 from /perl-DBD-Oracle-1.19-1.el5.x86_64 has depsolving problems
  --> Missing Dependency: libocijdbc10.so()(64bit) is needed by package perl-DBD-Oracle-1.19-1.el5.x86_64 (/perl-DBD-Oracle-1.19-1.el5.x86_64)
perl-DBD-Oracle-1.19-1.el5.x86_64 from /perl-DBD-Oracle-1.19-1.el5.x86_64 has depsolving problems
  --> Missing Dependency: libclntsh.so.10.1()(64bit) is needed by package perl-DBD-Oracle-1.19-1.el5.x86_64 (/perl-DBD-Oracle-1.19-1.el5.x86_64)
perl-DBD-Oracle-1.19-1.el5.x86_64 from /perl-DBD-Oracle-1.19-1.el5.x86_64 has depsolving problems
  --> Missing Dependency: libociei.so()(64bit) is needed by package perl-DBD-Oracle-1.19-1.el5.x86_64 (/perl-DBD-Oracle-1.19-1.el5.x86_64)

据我所知,我已经安装了所有正确的库,例如:
oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
oracle-instantclient-sqlplus-10.2.0.5-1.x86_64.rpm
perl-DBI-1.52-2.el5.x86_64.rpm

它所抱怨缺失的所有文件都已安装,例如它声称缺少的第一个依赖项是libnnz10.so,但这已安装在/usr/lib/oracle/10.2.0.5/client64/lib/libnnz10.so。而且,如果我要求yum解决此依赖项,则它会解决该问题,例如:

> yum provides */libnnz10.so
Loaded plugins: product-id, security, subscription-manager
Updating Red Hat repositories.
Excluding Packages in global exclude list
Finished
oracle-instantclient-basic-10.2.0.5-1.x86_64 : Instant Client for Oracle Database 10g
Repo        : installed
Matched from:
Filename    : /usr/lib/oracle/10.2.0.5/client64/lib/libnnz10.so

我设置了变量
ORACLE_HOME="/usr/lib/oracle/10.2.0.5/client64"
LD_LIBRARY_PATH="/usr/lib/oracle/10.2.0.5/client64/lib"

我还将lib目录添加到路径中。

那么为什么yum说它可以解决,但又说不能呢?

2个回答

2

DBD::Oracle是众所周知的CPAN模块之一,安装过程非常困难。在过去的十年中,我安装了许多CPAN模块,但每次我都需要安装DBD::Oracle时,我都会倒吸一口气并准备花费数小时的痛苦。

最近,我在64位Ubuntu 12.04.2 LTS桌面上安装了DBD::Oracle。让我看看我做了什么。

我从Oracle网站下载了以下文件:

  • instantclient-basic-linux.x64-11.2.0.3.0.zip
  • instantclient-sdk-linux.x64-11.2.0.3.0.zip
  • instantclient-sqlplus-linux.x64-11.2.0.3.0.zip

我创建了一个目录/usr/local/oracle,进入该目录,并解压缩了所有三个文件。

然后我运行了以下命令:

LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2 \
  ORACLE_HOME=/usr/local/oracle/instantclient_11_2 \
  cpan DBD::Oracle

我可能漏掉了某些东西。祝你好运。


谢谢您的回复。不幸的是,这似乎不起作用。我设置了一个新的虚拟机来尝试它。当我运行cpan时,它说无法确定我的oracle版本。我已经包含了一个额外的步骤,我认为是必需的,即创建两个libclntsh.so和libocci.so的符号链接。 - MikeKulls
@MikeKulls 很不幸,现在有一个轻量级的 Oracle 适配器供 Java 使用,你可以将其放入 jar 包中以便于移植 Oracle 程序。但是 Perl 没有一种简单的方法来访问 Oracle,而不需要编译本地库。 - PP.
我认为解决方案是放弃Perl,转而使用Java。实际上,Perl真的很混乱。它唯一可取的特点就是正则表达式,而我想Java也可以做到。我其实更想使用C#,但它在Linux上并不是一个受支持的选择。 - MikeKulls
1
@MikeKulls 我非常喜欢Perl - 当你有一个轻量级的任务要完成时,它比Java更加灵活;而且脚本可以在不需要重新编译的情况下进行修改。Oracle才是一团糟。 - PP.
我对Java不能发表太多评论,因为我并没有使用过它,但我的工作并不是轻量级的,编译在我看来是一个优势。这可以防止别人胡乱更改我的工作,做出我不知道的“简单”更改,然后在以后意外地覆盖掉。我真的很喜欢C#,我知道它在很大程度上是Java的复制品。我只是发现在Perl中,你最终会依赖于一些由某个人在他们的车库里编写的文档不全的模块。 - MikeKulls
@MikeKulls 自 1994 年起,Perl 就已经编译成了字节码。这是在 Java 发布之前。主要区别在于 Perl 在编译方面非常快速,每次运行时都会编译所有内容。 - Brad Gilbert

0

似乎可以安装在更新版本的Red Hat上。我们在虚拟机上安装了6.4,一切都安装得很好,所以看起来这是一个答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接