让一个系统监控两个具有不同版本的Oracle数据库
12.1和10.1
为每个安装了Oracle客户端,sdk,sqlplus,我可以通过在为
设置适当的值后设置这些来查询12.1 db或10.1export 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数据库版本的最佳方法?
答案 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解决方案更清晰。