2017-07-20 56 views
1

小さなJavaユーティリティを他の開発者から継承しました.Javaファイルと実行可能な.jarのほんの一部です。ocijdbc11 java.library.pathに見つかりません

接続文字列を渡してJavaプログラムを実行します。これで、thin接続の代わりにthickドライバを使用するために、接続文字列をjdbc:oracle:thin:<user>/<password>@hostからjdbc:oracle:oci:<user>/<password>@hostに変更する必要があります。

結果として、「ocijdbc11(java.library.pathに見つかりません)」というエラーが表示されます。

ここに私の質問:

  1. はojdbc7.jarのocijdbc11一部ですか?または、どのファイルにJavaが必要ですか? ANSW:ocijdbc11はライブラリです/oracle/client/o11r2/lib/libocijdbc11.so
  2. ocijdbc11を見つけるのにどのパスが使用されているかをどのように確認できますか?

念のために:

$ ls /oracle/client/o12r1/ 

assistants  diagnostics jlib   oui   slax 
bin   dmu   ldap   owm   sqlplus 
cdata   has   lib   perl   srvm 
cfgtoollogs hs    network  plsql   ucp 
clone   install  nls   precomp  usm 
crs   instantclient odbc   QOpatch  utl 
css   inventory  OPatch   racg   wwg 
cv    javavm   opmn   rdbms   xdk 
dc_ocm   jdbc   oracore  relnotes 
deinstall  jdk   oraInst.loc root.sh 

UPD私はオプション-Djava.library.path=/oracle/client/o11r2を使用しようとした他のエラーを得ました。しかし、11.2の代わりにOracle 12.1を使用する方法はまだ分かりません。

UPD2私は11の代わりにOracle 12を使用するように環境パスを変更しました。そして今エラーはocijdbc12 (Not found in java.library.path)のように見えます。ファイル/oracle/client/o12r1/lib/libocijdbc12.soが存在します。

/oracle/client/o11r2/lib~LD_LIBRARY_PATH - 同じエラー(ocijdbc12 (Not found in java.library.path))を追加しました。私はオプション-Djava.library.path=/oracle/client/o12r2/libを試しました - 同じエラー。それを修正するために私を助けてもらえますか?

答えて

1

ocijdbc11は、Oracle Instant Clientからダウンロードできるネイティブ・ライブラリ(.soまたは.dll)です。これは、OCIへのJNIコールを含むレイヤーです。このライブラリは、太いドライバを使用する場合に必要です。 ojdbc jarに一致するバージョンをインストールしてください(つまり、11.2のJDBC jarを使用しているように見えます。そうでない場合は、12.1のojdbc jarを使用していた場合、ocijdbc12が見つからないというエラーが表示されます)。

+0

"11.2のJDBC jarを使用しているようです。" - そうですね。しかし、私は12.1へのパスをどのように変更できますか?それはちょうどいくつかの環境変数か、私はJavaプログラムを再コンパイルする必要がありますか? – Vikora

+0

再コンパイルする必要はありません。 JDBC jarを12.1または12.2のJDBC jarに置き換えるだけで、Oracle JDBCのダウンロード・ページからダウンロードできます。 12.2からのものはJDK8以降でのみ動作することに注意してください(JDK7はサポートされません)。 –

+0

"JDBC jarを12.1のものと置き換えるだけです。" - どこに置き換えますか? JavaはOracle 11.2を使用していますが、12.1( – Vikora

0

プログラムを実行するには、ojdbcN.jarlibocijdbcM.soの両方が必要です。これらのコンポーネントは、同じOracleクライアントから取得する必要があります。 Nは、Javaバージョンを指します。Mは、Oracleバージョンを指します。

もちろん、libclntsh.soとそれに依存するライブラリも必要です。

あなたはこの(想定java7、64ビット)を試みることができる:

export ORACLE_HOME=/oracle/client/o12r1 
export LIBPATH=$ORACLE_HOME/lib 
java -cp $ORACLE_HOME/jdbc/lib/ojdbc7.jar:... -Djava.library.path=$ORACLE_HOME/lib 

編集:Java実行可能ファイルとライブラリ、この組み合わせは動作しません。例えば、同じビット番号(32または64)を持っている必要があります。

$ file $JAVA_HOME/bin/java $ORACLE_HOME/lib/libclntsh.so $ORACLE_HOME/lib/libocijdbc12.so 
/usr/java6/bin/java: executable (RISC System/6000) or object module not stripped 
/orabin/OraHome_Current/lib/libclntsh.so: 64-bit XCOFF executable or object module not stripped 
/orabin/OraHome_Current/lib/libocijdbc12.so: 64-bit XCOFF executable or object module not stripped 

ここで、Javaは32ビット、Oracleは64ビットです。

編集:この質問はAIXにフラグが立てられています。それは意図的なのでしょうか?

+0

すべてはあなたが書いたようなものですが、 ( – Vikora

+0

あなたは親切に投稿を編集して関連する行を貼り付けます...またはファイルまたは何かとして添付... –

関連する問題