установить Oracle Instantclient в Linux без установки переменных среды? - PullRequest
5 голосов
/ 19 апреля 2009

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

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

примечание для OS / X: установка Oracle Instantclient в Mac OS / X без установки переменных среды?

Ответы [ 6 ]

9 голосов
/ 19 апреля 2009

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

Чтобы использовать мгновенный клиент без установки каких-либо переменных среды:

Загрузите дистрибутив 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, скопируйте его в / etc, который является глобальным местом по умолчанию, которое ищет среда исполнения Oracle.

sudo cp tnsnames.ora /etc

Тест с

/usr/bin/sqlplus scott/tiger@myoracle
4 голосов
/ 29 мая 2009

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

3 голосов
/ 19 апреля 2009

Конечно, вы можете переименовать 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+"$@"}
1 голос
/ 27 июля 2016

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

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

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

1 голос
/ 04 мая 2011

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

Linux

sqlplus user/pass@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))'

Windows

sqlplus user/pass@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))"

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

0 голосов
/ 16 марта 2010

Для тех, кто играет с Solaris (как я!) Из Linux, я обнаружил, что решение @David Phillips хорошо работает с помощью команды Solaris crle -u -l /opt/instantclient

Спасибо за сообщение http://chrismiles.info/systemsadmin/solaris/articles/ld-path-customisation-on-solaris/

...