Oracle的指令指定设置LD_LIBRARY_PATH。这使我的应用程序依赖于随机用户的配置,并且设置非常麻烦。
如何避免设置任何环境变量?
OS / X的相关说明:installing Oracle Instantclient on Mac OS/X without setting environment variables?
答案 0 :(得分:9)
Oracle的instantclient安装说明指定用户设置LD_LIBRARY_PATH。管理多个用户非常麻烦。
要在不设置任何环境变量的情况下使用instantclient:
从oracle.com下载instantclient发行版。对于非Java软件开发,您将需要(假设Oracle 10.2):
instantclient-basic-linux-x86_64-10.2.0.4.0.zip
instantclient-sdk-linux-x86_64-10.2.0.4.0.zip
instantclient-sqlplus-linux-x86_64-10.2.0.4.0.zip
解压缩这三个文件。这将为您提供一个目录
instantclient_10_2/
将文件复制到/ usr,这是动态加载程序搜索的默认位置之一。
sudo cp instantclient_10_2/sdk/include/*.h /usr/include
sudo cp instantclient_10_2/sqlplus /usr/bin
sudo cp instantclient_10_2/*.so* /usr/lib
如果您使用tnsnames.ora,请将其复制到/ etc,这是oracle运行时搜索的默认全局位置。
sudo cp tnsnames.ora /etc
使用
进行测试/usr/bin/sqlplus scott/tiger@myoracle
答案 1 :(得分:4)
将库路径添加到/etc/ld.so.conf
,然后运行/sbin/ldconfig
。您无需为LD_LIBRARY_PATH
等标准位置中安装的库设置/usr/lib
,因为这些位置已在/etc/ld.so.conf
中配置。
答案 2 :(得分:3)
您当然可以将sqlplus重命名为sqlplus.real并制作包装脚本:
#!/bin/sh
if [ "$LD_LIBRARY_PATH" = "" ]
then
LD_LIBRARY_PATH=/what/ever
else
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/what/ever
fi
export LD_LIBRARY_PATH
exec sqlplus.real ${1+"$@"}
答案 3 :(得分:1)
或者您可以尝试使用此命令
的Linux
sqlplus user/pass@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))'
窗
sqlplus user/pass@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))"
所以你不需要tnsnames.ora
答案 4 :(得分:1)
Oracle关于设置LD_LIBRARY_PATH
的说明不是最理想的。
在Linux或Solaris等ELF平台上,实际上不需要设置LD_LIBRARY_PATH
,因为正确的库搜索路径(也称为runpath)可以在构建时相对于位置写入二进制文件二进制文件。因此,使用这样的二进制文件,即使复制了已安装的子树,运行时链接程序也始终能够找到打包的库。
不幸的是,Oracle并没有创建Linux' Instant Client'这样的二进制文件。但是,可以使用patchelf
修复它们。
例如:
patchelf --set-rpath '$ORIGIN/..' /path/to/instantclient_11_2/sdk/proc
patchelf --set-rpath '$ORIGIN' /path/to/instantclient_11_2/sqlplus
patchelf --set-rpath '$ORIGIN' /path/to/instantclient_11_2/libclntsh.so.11.1
在这些更改之后,运行时链接程序能够找到所有需要的库,而不包含任何LD_LIBRARY_PATH
环境变量。
在Solaris上有elfedit
- 但是IIRC至少有一些用于Solaris的Oracle数据库软件包已经有足够的运行路径。可以通过例如验证elfdump /path/to/sqlplus | grep PATH
。
有关elfedit
以及LD_LIBRARY_PATH
的其他优秀替代方案(不涉及更改二进制文件本身)的详细信息,请参阅我的文章LD_LIBRARY_PATH considered harmful。
答案 5 :(得分:0)
对于来自Linux背景的任何玩Solaris的人(比如我!),我发现@David Phillips解决方案使用Solaris命令crle -u -l /opt/instantclient
感谢帖子 http://chrismiles.info/systemsadmin/solaris/articles/ld-path-customisation-on-solaris/