2009-04-19 5 views
4

Инструкции Oracle определяют настройку LD_LIBRARY_PATH. Это заставляет мое приложение зависеть от конфигурации произвольных пользователей и очень сложно настроить.Установка Oracle Instantclient на Linux без установки переменных окружения?

Как я могу избежать необходимости устанавливать какие-либо переменные среды?

родственное примечание для OS/X: installing Oracle Instantclient on Mac OS/X without setting environment variables?

ответ

9

инструкции по установке instantclient Oracle, указать, что множество пользователей LD_LIBRARY_PATH. Это очень хлопотно для управления несколькими пользователями.

Чтобы использовать instantclient без установки каких-либо переменных окружения:

Скачать распределение instantclient из oracle.com. Для ведения разработки программного обеспечения, не 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, скопируйте его в/и т.д., что глобальное место по умолчанию поиски во время выполнения оракул.

sudo cp tnsnames.ora /etc 

Тест с

/usr/bin/sqlplus scott/[email protected] 
+1

Я не знаю, что это отличная практика, но она работает! – pfctdayelise

+1

Это действительно плохая практика. Подумайте, что вам нужно сделать, когда вам нужно обновить. – JonMR

+1

До сих пор наши обновления были простыми ... удалите старую версию instantclient и установите новую версию instantclient. Один из наших компромиссов заключается в том, что мы обслуживаем рендеринг с почти 15 000 ядер, поэтому устранение потенциальных проблемных областей, таких как неверно заданные переменные среды, является большой победой для нас. Конечно, YMMV. –

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+"[email protected]"} 
3

Добавить путь к библиотеке в /etc/ld.so.conf, а затем запустить /sbin/ldconfig. Вам не нужно устанавливать LD_LIBRARY_PATH для библиотек, установленных в стандартных местах, таких как /usr/lib, потому что эти местоположения уже настроены в /etc/ld.so.conf.

1

или вы можете попробуйте использовать эту команду

Linux

sqlplus user/[email protected]'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))' 

Windows

sqlplus user/[email protected]"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))" 

так что вам не нужно TNSNames.ora

1

инструкции Oracle в отношении установив LD_LIBRARY_PATH являются оптимальными.

На платформах ELF, таких как Linux или Solaris, нет необходимости требовать установки LD_LIBRARY_PATH, поскольку правильный путь поиска библиотеки (aka runpath) можно записать в двоичный файл во время сборки по отношению к местоположению двоичного файла , Таким образом, с такими двоичными файлами компоновщик времени выполнения всегда может находить упакованные библиотеки, даже если скопировано установленное поддерево.

К сожалению, Oracle не создает бинарные файлы «Instant Client» Linux. Но их можно исправить 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 по крайней мере некоторые пакеты Oracle DB для Solaris уже имеют достаточную траекторию пути. Можно проверить, что через, например, elfdump /path/to/sqlplus | grep PATH.

Для получения более подробной информации о elfedit и других хороших альтернатив LD_LIBRARY_PATH (которые не связаны с изменением сам бинарный) смотрите также мою статью LD_LIBRARY_PATH considered harmful.

Смежные вопросы