2009-04-19 17 views
4

Oracleの指示では、LD_LIBRARY_PATHの設定が指定されています。これは私のアプリケーションをランダムなユーザーの設定に依存させ、設定するのが非常に面倒です。環境変数を設定せずにLinuxにOracle Instantclientをインストールしますか?

どのように環境変数を設定する必要はありませんか?

関連ノートのOS/X:installing Oracle Instantclient on Mac OS/X without setting environment variables?

答えて

9

Oracleのinstantclientにインストール手順ユーザーがLD_LIBRARY_PATHを設定することを指定します。これは、複数のユーザーのために管理するのは非常に面倒です。

oracle.comからinstantclientに配布をダウンロードしてください:任意の環境変数を設定せずに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 

は、3つのファイルを解凍します。これがデフォルトの場所ダイナミックローダ検索の一つでは/ usrにファイルをコピーし、あなたのディレクトリ

instantclient_10_2/ 

を与えるだろう。

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ファイルを使用する場合は、デフォルトのグローバルな場所Oracleランタイムを検索しているは、/ etcにコピーします。あなたはもちろん、ラッパースクリプトをsqlplus.realして作るためにSQLPLUSの名前を変更することができ

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

これは素晴らしい習慣であることはわかりませんが、うまくいきます! – pfctdayelise

+1

これは本当に悪い習慣です。あなたがアップグレードする必要があるときに何をしなければならないか考えてみてください。 – JonMR

+1

これまでのアップグレードは単純でした...旧バージョンのinstantclientをアンインストールし、新しいバージョンのinstantclientをインストールしてください。私たちが持っているトレードオフの1つは、約15,000コアのレンダリングサービスを提供していることです。誤って設定された環境変数などの潜在的な問題領域を排除することは、私たちにとって大きな勝利です。もちろんYMMV。 –

3

sudo cp tnsnames.ora /etc 

テスト:

#!/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

/sbin/ldconfigを実行し、/etc/ld.so.confにライブラリパスを追加します。これらの場所は既に/etc/ld.so.confに設定されているため、/usr/libのような標準の場所にインストールされたライブラリの場合は、LD_LIBRARY_PATHを設定する必要はありません。 Linuxの背景から来るのSolarisと一緒に遊んで、誰のために

1

たりすることができますを投稿するcrle -u -l /opt/instantclient

おかげで働いたことがわかりました

sqlplus user/[email protected]'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port_number)))(CONNECT_DATA=(SID=sid)))' 
のLinuxにこのコマンド

を使用してみてください

のWindows

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

ので、あなたは、tnsnames.oraにLD_LIBRARY_PATHが最適ではない設定に関する

1

Oracleの指示を必要としません。

LinuxやSolarisのようなELFプラットフォームでは、バイナリの場所を基準にして、正しいライブラリ検索パス(別名runpath)をビルド時にバイナリに書き込むことができるため、LD_LIBRARY_PATHを設定する必要はありません。 。したがって、このようなバイナリでは、インストールされたサブツリーがコピーされたとしても、実行時リンカーはパッケージ化されたライブラリを常に見つけることができます。

残念ながら、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 DBパッケージにはすでに十分な実行パスが用意されています。例えば、 elfdump /path/to/sqlplus | grep PATH

elfeditとその他の良い代替手段LD_LIBRARY_PATH(バイナリ自体の変更は含まれません)の詳細については、私の記事LD_LIBRARY_PATH considered harmfulも参照してください。

関連する問題