使用Perl的多个Oracle版本

时间:2015-05-14 18:30:21

标签: linux oracle perl

让一个系统监控两个具有不同版本的Oracle数据库

12.1和10.1

为每个安装了Oracle客户端,sdk,sqlplus,我可以通过在为

设置适当的值后设置这些来查询12.1 db或10.1
export LD_LIBRARY_PATH=
export PATH=
export ORACLE_BASE=
export ORACLE_HOME=
export TNS_ADMIN=`

但Perl似乎没有拿到不同的版本。我明白了:

CRITICAL - cannot connect to 10.16.183.98:1521/CV. ORA-03134: Connections to this server version are no longer supported. (DBD ERROR: OCISessionBegin)

表示仅使用12.1尝试连接到10.1。什么是能够从Perl查询两个不同的Oracle数据库版本的最佳方法?

2 个答案:

答案 0 :(得分:1)

当你试图通过环境变量控制这个时,我会假设你不需要在同一个程序中与这两个数据库进行对话。

如果我没记错的话,需要针对您打算使用它的特定Oracle客户端构建DBD::Oracle。因此,您可能希望将库的两个不同版本编译到单独的目录中,并use lib指向您要使用的特定目录。

答案 1 :(得分:0)

为什么不安装Oracle客户端11g?它应该适用于两个版本。

在Linux上,可执行格式.ELF支持通过编译进入二进制文件的库搜索路径(查看-rpath链接器参数)。这可能在LD_LIBRARY_PATH之前具有优先权。转到site_perl目录并搜索Oracle.so库。然后在其上执行ldd(没有设置LD_LIBRARY_PATH)。

我还认为如果从编译中删除了这个rpath参数,那么你可以使用LD_LIBRARY_PATH切换OCI库(liblntsh.so)。 OCI lib ABI严格向后兼容,只有少数功能被添加到新版本中。

PS:使用use lib的tjd解决方案更清晰。