この章では、Java Database Connectivity(JDBC)Oracle Call Interface(OCI)ドライバ固有の機能について説明します。OCI Instant Clientについても説明します。この章の内容は次のとおりです。
OCI接続プーリング機能は、オラクル社設計の拡張機能です。JDBC OCIドライバで提供される接続プーリングによって、アプリケーションは少数の物理接続を使用して、複数の論理接続を保持できます。この論理接続でのコールは、指定された時間に使用可能な物理接続にルーティングされます。
クライアント結果キャッシュ機能により、クライアント側でのSQL問合せ結果セットのクライアント・メモリーへのキャッシュが可能になります。このようにして、OCIアプリケーションでは、クライアント・メモリーを使用することで、繰返しの問合せのレスポンス時間を改善するためにクライアント結果キャッシュを利用できます。
関連項目: Oracle Call Interfaceプログラマーズ・ガイド |
この項の内容は次のとおりです。
OCIクライアント側結果セット・キャッシュには次のような利点があります。
JDBC OCIクライアント側結果セット・キャッシュは、OCIアプリケーションに対して完全に透過的です。結果セット・データのキャッシュは、結果セットに影響を与えるすべてのセッションまたはデータベース変更と一致するように維持されています。
結果セットはクライアント側にあるため、キャッシュ・ヒットが起こると、サーバーへのラウンドトリップが行われるのではなく、SQL問合せが実行され、ローカルに処理するようにフェッチがコールされます。このため、サーバーCPUやサーバーI/Oなどのサーバー・リソースにとって、非常に大きなパフォーマンスの節約になります。
JDBC OCIクライアント上の結果キャッシュはプロセスごとのものであるため、複数のクライアント・セッションで、キャッシュされた一致している結果セットを同時に使用できます。
JDBC OCIクライアントの結果キャッシュにより、各OCIアプリケーションが独自のカスタム結果セット・キャッシュを持つ必要性が最小限に抑えられます。
JDBC OCIクライアントの結果キャッシュではOCIクライアント・メモリーが使用され、サーバー・メモリーよりコストが低くなります。
結果キャッシュを有効化するには次の2つの方法があります。
注意:
|
RESULT_CACHE_MODE
パラメータを使用して、問合せで使用する表の結果キャッシュ・モードを決定できます。ALTER SESSION
およびALTER SYSTEM
文でこの句を使用するか、またはサーバー・パラメータ・ファイル(init.ora
)内でこの句を使用して、結果キャッシュを決定します。RESULT_CACHE_MODE
パラメータを設定して、SQL問合せ結果キャッシュをすべての問合せで使用するか、SQLヒントまたは表注釈を使用して結果キャッシュ・ヒントで注釈を付けられている問合せのみで使用するかを制御できます。
表注釈を使用して、コードを変更しないで結果キャッシュを有効にできます。ALTER TABLE
およびCREATE TABLE
文を使用すると、結果キャッシュ・モードで表に注釈を付けることができます。構文は次のとおりです。
CREATE|ALTER TABLE [<schema>.]<table> ... [RESULT_CACHE (MODE {FORCE|DEFAULT})]
次の例では、CREATE TABLE
文で表注釈を使用する方法を示しています。
CREATE TABLE foo (a NUMBER, b VARCHAR2(20)) RESULT_CACHE (MODE FORCE);
次の例では、ALTER TABLE
文で表注釈を使用する方法を示しています。
ALTER TABLE foo RESULT_CACHE (MODE DEFAULT);
SQLヒントを使用し、/*+ result_cache */
または/*+ no_result_cache */のヒントの付いている問合せに注釈を付けることによってキャッシュする問合せを指定できます。たとえば、次のコードを見てください。
String query = "select /*+ result_cache */ * from emp where empno < : 1"; ((oracle.jdbc.OracleConnection)conn).setImplicitCachingEnabled(true); ((oracle.jdbc.OracleConnection)conn).setStatementCacheSize(10); PreparedStatement pstmt; ResultSet rs; for (int j = 0 ; j < 10 ; j++ ) { pstmt = conn.prepareStatement (query); pstmt.setInt(1,7500); rs = pstmt.executeQuery(); while (rs.next( ) ) { // see the values } rs.close; pstmt.close( ) ; } }
この例では、クライアント結果キャッシュのヒント/*+ result_cache */
が、実際の問合せであるselect * from emp where empno < : 1
に注釈として付けられています。したがって、問合せは最初にデータベースに対して実行され、その結果セットが、問合せの残り9回の実行用にキャッシュされます。これにより、アプリケーションのパフォーマンスは大幅に向上します。これは主として読取り専用データの場合に便利です。
SQLヒントの例を次に示します。次の例はすべて、dept
表が結果キャッシュのために次のコマンドによって注釈を付けられていることを前提にしています。
ALTER TABLE dept result_cache (MODE FORCE);
例
SELECT * FROM emp
結果セットはキャッシュされません。
SELECT * FROM dept
結果セットはキャッシュされます。
SELECT /*+ result_cache */ empno FROM emp
結果セットはキャッシュされます。
SELECT /*+ no_result_cache */ deptno FROM dept
結果セットはキャッシュされません。
SELECT /*+ result_cache */ * FROM dept
問合せヒントは不要ですが、結果セットはキャッシュされます。
SELECT e.ename FROM emp e, dept d WHERE e.deptno = d.deptno
問合せヒントが使用不可で、すべての表がFORCE
として注釈を付けられていないため、結果セットはキャッシュされません。
注意: 使用ガイドライン、クライアント・キャッシュの整合性、デプロイ時間の設定、クライアント・キャッシュ統計情報、クライアント結果キャッシュの検証およびOCIクライアント結果キャッシュとサーバー結果キャッシュの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。 |
JDBC OCIドライバの透過的アプリケーション・フェイルオーバー機能を使用すると、接続先のデータベース・インスタンスがダウンした場合でも、データベースに自動的に再接続できます。別のノードで作成されても、新しいデータベース接続は元の接続とまったく同じです。
JDBC OCIには、ネイティブXAと呼ばれる機能も用意されています。この機能により、ネイティブAPIを使用してXAコマンドを送信できます。非ネイティブAPIと比較して、ネイティブAPIを使用するほうが、高いパフォーマンスを達成できます。
この項の内容は次のとおりです。
Instant Client機能を使用すると、Oracleホームの必要性がなくなり、OCI、Oracle C++ Call Interface(OCCI)、Open Database Connectivity(ODBC)およびJDBC-OCIベースのカスタマ・アプリケーションのデプロイが非常に簡単になります。Instant Clientモードで実行するJDBC OCIアプリケーションに必要な記憶域の容量は、クライアント側に完全にインストールして実行するアプリケーションに比べて少なくなります。Instant Clientの共有ライブラリに使用されるディスク領域は、クライアント側に完全にインストールした場合の約1/4です。
表6-1は、JDBC OCIアプリケーションのデプロイに必要なOracleのクライアント側ファイルを示しています。この表では、リリース11.2のライブラリ名を使用しています。ライブラリ名の数字の部分は、リリースに応じて将来変更されます。
表6-1 OCI Instant Client共有ライブラリ
LinuxシステムとUNIXシステム | LinuxシステムとUNIXシステムの場合の説明 | Microsoft Windows | Microsoft Windowsの場合の説明 |
---|---|---|---|
|
クライアント・コード・ライブラリ |
|
アプリケーションがリンクする各機能の転送 |
|
OCI Instant Clientデータ共有ライブラリ |
|
データとコード |
|
セキュリティ・ライブラリ |
|
セキュリティ・ライブラリ |
|
OCI Instant Client JDBCライブラリ |
|
OCI Instant Client JDBCライブラリ |
すべてのJDBC Javaアーカイブ(JAR)ファイル |
関連項目: 「環境変数の確認」 |
すべてのJDBC JARファイル |
関連項目: 「環境変数の確認」 |
注意: ネイティブXA機能を提供するには、JDBC XAクラス・ライブラリをコピーする必要があります。UNIXシステムでは、このライブラリlibheteroxa11.so はORACLE_HOME /jdbc/lib ディレクトリに格納されています。Microsoft Windowsでは、このライブラリheteroxa11.dll はORACLE_HOME \bin ディレクトリに格納されています。 |
Instant Clientには次のような利点があります。
インストール時にコピーされるファイルの数がそれほど多くありません。
Oracleのクライアント側で必要なファイルの数と合計ディスク領域が大幅に減少します。
Instant Clientでデプロイされたアプリケーションでは、機能またはパフォーマンスに損失がありません。
サード・パーティのソフトウェア・ベンダーがアプリケーションを簡単にパッケージ化できます。
Instant Clientライブラリは、Oracle Universal InstallerでInstant Clientオプションを選択するとインストールできます。Oracle Technology NetworkのWebサイトからダウンロードすることもできます。インストールの手順は、次のとおりです。
Instant Client共有ライブラリおよびOracle JDBCクラス・ライブラリをダウンロードし、instantclient
などのディレクトリにインストールします。
ライブラリ・パスの環境変数を、手順1のディレクトリに設定します。たとえば、UNIXシステムでは、LD_LIBRARY_PATH
環境変数をinstantclient
に設定します。Microsoft Windowsでは、PATH
環境変数をinstantclient
ディレクトリに設定します。
CLASSPATH
環境変数に、JDBCクラス・ライブラリの完全パス名を追加します。
これで、JDBC OCIアプリケーションを実行する準備が整いました。
JDBC OCIアプリケーションは、ライブラリ・パスの環境変数を介してOCI共有ライブラリおよびJDBC共有ライブラリにアクセスできる場合、Instant Clientモードで動作します。Instant ClientモードではORACLE_HOME
への依存性はなく、ORACLE_HOME
に用意されている他のコードおよびデータファイルは、tnsnames.ora
ファイルを除いて、JDBC OCIには不要です。
Instant Clientは、Oracle Universal InstallerでInstant Clientオプションを選択するとインストールできます。Instant Clientファイルは、必ず空のディレクトリにインストールしてください。Instant Clientモードで動作するには、OTNのインストールと同じように、LD_LIBRARY_PATH
環境変数をInstant Clientディレクトリに設定する必要があります。
管理者
オプションを選択して完全なクライアント・インストールを実行した場合は、Instant Client共有ライブラリもインストールされます。完全なクライアント・インストールでは、Instant Client共有ライブラリおよびJDBCクラスは次の場所に格納されます。
LinuxシステムまたはUNIXシステムの場合:
libociei.so
ライブラリは、$ORACLE_HOME/instantclient
に格納されます。
libclnstsh.so.11.2
、libocijdbc11.so
およびlibnnz11.so
は、$ORACLE_HOME/lib
に格納されます。
JDBCクラス・ライブラリは、$ORACLE_HOME/jdbc/lib
に格納されます。
Microsoft Windowsの場合:
oraociei11.dll
ライブラリはORACLE_HOME\instantclient
に格納されます。
oci.dll
、ocijdbc11.dll
およびorannzsbb11.dll
は、ORACLE_HOME\bin
に格納されます。
JDBCクラス・ライブラリはORACLE_HOME\jdbc\lib
に格納されます。
これらのファイルを別のディレクトリにコピーし、そのディレクトリにライブラリ・パスを設定し、JDBCクラス・ライブラリのパス名をCLASSPATH
環境変数に追加すると、JDBC OCIアプリケーションをInstant Clientモードで実行できます。
注意:
|
Instant Clientはデプロイメント用の機能であるため、本番アプリケーションの実行に使用します。デプロイメントでは、デモ用のプログラムなどにアクセスできるようにするために、完全インストールが必要です。一般的に、Instant Clientモードがクライアント側動作専用でないかぎり、Instant Clientモードで実行されているアプリケーションではすべてのJDBC OCI機能を使用できます。したがって、サーバー側の外部プロシージャは、Instant Clientモードでは動作しません。
Instant Clientはデプロイメント用の機能であるため、JDBC OCIアプリケーションの実行に必要なファイルの数とサイズの減少に重点が置かれています。したがって、Instant Client共有ライブラリのパッチに必要なすべてのファイルがInstant Clientのデプロイ時に揃っているわけではありません。Instant Client共有ライブラリのパッチには、ORACLE_HOME
ベースの完全クライアント・インストールが必要です。opatch
ユーティリティを使用して、Instant Client共有ライブラリにパッチを適用します。
注意: Microsoft Windows上では、共有ライブラリにパッチを当てることはできません。 |
ORACLE_HOME
環境でパッチを適用した後、表6-1「OCI Instant Client共有ライブラリ」のファイルをInstant Clientディレクトリにコピーします。「JDBC OCI Instant Clientのインストール手順」を参照してください。
個々のファイルをコピーするかわりに、「データ共有ライブラリとZIPファイルの再生成」の説明に従って、OCI、OCCI、JDBCおよびSQL*Plus用のInstant Client ZIPファイルを生成できます。次に、「JDBC OCI Instant Clientのインストール・プロセス」に従って、ZIPファイルをターゲット・コンピュータにコピーして解凍できます。
opatch
ユーティリティは、libclnstsh.so.11.2
にORACLE_HOME
インストールのパッチ情報を格納します。次のコマンドを使用すると、この情報を取り出すことができます。
genezi -v
Instant Clientのデプロイ元のコンピュータにgenezi
ユーティリティが装備されていない場合、ORACLE_HOME
インストールが装備されたコンピュータ上のORACLE_HOME
/bin
ディレクトリからコピーする必要があります。
ORACLE_HOME
を管理者オプションでインストールした場合は、次の手順を実行して、OCI Instant Clientデータ共有ライブラリ(libociei.so
)を再生成できます。
mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ilibociei
ORACLE_HOME
内の現行ファイルに基づく新しいバージョンのlibociei.so
データ共有ライブラリが、ORACLE_HOME
/rdbms/install/instantclient
ディレクトリに配置されます。
再生成されるデータ共有ライブラリ(libociei.so
)の場所は、元のデータ共有ライブラリ(libociei.so
)の場所と異なり、ORACLE_HOME
/instantclient
ディレクトリですので注意してください。前の手順では、OCI、OCCI、JDBCおよびSQL*PlusのInstant Client ZIPファイルも生成されます。
Microsoft Windowsプラットフォームでは、データ共有ライブラリとZIPファイルを再生成することはできません。
tnsnames.ora
やsqlnet.ora
などの構成ファイルの格納先としてORACLE_HOME
またはTNS_ADMIN
環境変数を使用しないOracle Netネーミング・メソッドは、すべてInstant Clientモードで動作します。特に、接続文字列は次のような形式で指定できます。
次のようなThin形式の接続文字列の場合:
host:port:service_name
たとえば、次のようになります。
url="jdbc:oracle:oci:@//example.com:5521:bjava21"
次のようなSQL接続URL文字列の場合:
//host:[port][/service name]
たとえば、次のようになります。
url="jdbc:oracle:oci:@//example.com:5521/bjava21
Oracle Netのキーワード値ペア。たとえば、次のようになります。
url="jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=dlsun242) (PORT=5521)) (CONNECT_DATA=(SERVICE_NAME=bjava21)))"
構成ファイルの格納先としてTNS_ADMIN
が必要なネーミング・メソッドをそのまま使用するには、TNS_ADMIN
環境変数を設定します。
関連項目: 接続フォーマットの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。 |
TNS_ADMIN
環境変数を設定せずに、inst1
などのTNSNAMES
エントリを使用する場合は、ORACLE_HOME
環境変数を設定し、構成ファイルを$ORACLE_HOME/network/admin
ディレクトリに格納する必要があります。
注意: この場合、ORACLE_HOME 環境変数は、Oracle Net構成ファイルの格納先としてのみ使用されます。それ以外のクライアント・コード・ライブラリのコンポーネントでは、ORACLE_HOME 環境変数の値は使用されません。 |
空の接続文字列は、サポートされません。ただし、空の接続文字列の使用に代わる方法として、tnsnames.ora
エントリまたはOracle Netキーワード値ペアに対して、UNIXシステム上ではTWO_TASK
環境変数を、Microsoft Windows上ではLOCAL
変数を設定する方法があります。TWO_TASK
またはLOCAL
がtnsnames.ora
エントリに設定されている場合、TNS_ADMIN
またはORACLE_HOME
設定によってtnsnames.ora
ファイルをロードする必要があります。
例
データベース・サーバー上のlistener.ora
ファイルに次の情報が格納されているとします。
LISTENER = (ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=server6)(PORT=1573))) SID_LIST_LISTENER = (SID_LIST= (SID_DESC=(SID_NAME=rdbms3) (GLOBAL_DBNAME=rdbms3.server6.us.alchemy.com) (ORACLE_HOME=/home/dba/rdbms3/oracle)))
このサーバーには、次のいずれかの方法で接続できます。
url = "jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=server6)(PORT=1573)) (CONNECT_DATA=(SERVICE_NAME=rdbms3.server6.us.alchemy.com)))"
または
url = "jdbc:oracle:oci:@//server6:1573/rdbms3.server6.us.alchemy.com"
または、TWO_TASK
環境変数を任意の接続文字列に設定すれば、sqlplus
コマンドとともに接続文字列を指定しなくても、データベース・サーバーに接続できます。たとえば、次の方法のいずれかを使用してTWO_TASK
環境変数を設定します。
setenv TWO_TASK "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=server6)(PORT=1573)) (CONNECT_DATA=(SERVICE_NAME=rdbms3.server6.us.alchemy.com)))"
または
setenv TWO_TASK //server6:1573/rdbms3.server6.us.alchemy.com
これで、次のURLを使用すると、データベース・サーバーに接続できます。
url = "jdbc:oracle:oci:@"
接続文字列は、tnsnames.ora
ファイルに格納できます。たとえば、tnsnames.ora
ファイルに次の情報が格納されているとします。
conn_str = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=server6)(PORT=1573)) (CONNECT_DATA=(SERVICE_NAME=rdbms3.server6.us.alchemy.com)))
このtnsnames.ora
ファイルが/home/webuser/instantclient
ディレクトリに配置されている場合、次のように、TNS_ADMIN
環境変数(または、Microsoft WindowsではLOCAL
)を設定できます。
setenv TNS_ADMIN /home/webuser/instantclient
これで、次のように接続できます。
url = "jdbc:oracle:oci:@conn_str"
注意: TNS_ADMIN 環境変数では、tnsnames.ora ファイルが配置されているディレクトリを指定します。ただし、TNS_ADMIN では、tnsnames.ora ファイルのフルパスを指定するのではなく、ディレクトリを指定します。 |
このtnsnames.ora
ファイルが、Oracleホームの/network/server6/home/dba/oracle/network/admin
ディレクトリに配置されている場合、TNS_ADMIN
を使用してtnsnames.ora
ファイルを配置するかわりに、次のようにORACLE_HOME
環境変数を使用できます。
setenv ORACLE_HOME /network/server6/home/dba/oracle
これで、先に指定したように、接続文字列conn_str
のいずれかを使用して接続できます。
TNS_ADMIN
またはORACLE_HOME
によってtnsnames.ora
を特定できる場合、TWO_TASK
は次のように設定できます。
setenv TWO_TASK conn_str
次のURLで接続できます。
url = "jdbc:oracle:oci:@"
ORACLE_HOME
環境変数は、NLS、COREおよびエラー・メッセージ・ファイルの位置を決定するものではなくなりました。OCIのみのアプリケーションでは、ORACLE_HOME
環境変数を設定する必要はありません。ただし、変数が設定されていても、OCIドライバの動作に影響はありません。OCIドライバは、常にデータ共有ライブラリからドライバのデータを入手します。データ共有ライブラリが利用できない場合のみ、ORACLE_HOME
環境変数が使用され、フル・クライアント・インストールとみなされます。ORACLE_HOME
環境変数は設定不要ですが、設定する場合は、ディレクトリを識別する有効なオペレーティング・システム・パス名に設定する必要があります。
Instant Clientモードの場合、環境変数ORA_NLS10
およびORA_NLSPROFILES33
は無視されます。
Instant Clientモードでは、ORA_TZFILE
変数を使用しない場合、サイズの大きいデフォルトのtimezlrg_n.dat
ファイルがデータ共有ライブラリから使用されます。サイズの小さいtimezone_n.dat
ファイルをデータ共有ライブラリから使用する場合は、絶対または相対パス名を付けずに、このファイルの名前をORA_TZFILE
環境変数に設定します。つまり、次のように設定します。
UNIXシステムの場合:
setenv ORA_TZFILE timezone_n.dat
Microsoft Windowsの場合:
set ORA_TZFILE timezone_n.dat
前述の例では、nはタイムゾーン・データファイルのバージョン番号です。
OCIドライバがデータ共有ライブラリを利用できないためにInstant Clientモードで動作しない場合、ORA_TZFILE
変数を設定する際は、以前のOracle Databaseのリリースのときと同様に完全パス名を指定します。
TNSNAMES
のエントリを使用する場合は、前述のように、TNS_ADMIN
ディレクトリにTNSNAMES
構成ファイルを格納する必要があります。TNS_ADMIN
を設定しない場合は、ORACLE_HOME/network/admin
ディレクトリにOracle Net Services構成ファイルを格納する必要があります。
Instant Clientの軽量バージョンは、Instant Client Light(English)と呼ばれます。Instant Client Lightは、短いファイル名です。Instant Client Lightは、Instant Clientを大幅に小さくしたバージョンです。クライアント・インストールのディスク空き容量要件は、約63MB少なくてすみます。これは、サイズが4MBの軽量データ共有ライブラリ(UNIXシステムの場合libociicus.so
)によるもので、これはサイズが67MBのデータ共有ライブラリlibociei.so
のサブセットです。
この軽量データ共有ライブラリは、少数のキャラクタ・セットとエラー・メッセージを英語のみでサポートしています。そのため、Instant Client Light(English)という名前が付いています。Instant Client Lightは、英語のエラー・メッセージのみを必要とし、US7ASCIIかWE8DEC、またはUnicodeキャラクタ・セットの1つを使用するアプリケーションに対応して設計されています。
表6-2では、様々なプラットフォームにおけるInstant ClientとInstant Client Light(English)用のデータ共有ライブラリ名を示しています。この表では、各データ共有ライブラリのサイズもライブラリ・ファイル名に続くカッコ内に記載しています。
表6-2 Instant ClientとInstant Client Light(English)用のデータ共有ライブラリ
プラットフォーム | Instant Client | Instant Client Light(English) |
---|---|---|
Sun Solaris |
|
|
Linux |
|
|
Microsoft Windows |
|
|
この項の内容は次のとおりです。
NLS_LANG
設定は、言語、地域およびキャラクタ・セットを、language
_
territory
.
characterset
として指定します。Instant Client Lightでは、language
はAmerican
のみ、territory
はサポートされる任意の値、characterset
は次のいずれかです。
シングルバイト
US7ASCII
WE8DEC
WE8MSWIN1252
WE8ISO8859P1
Unicode
UTF8
AL16UTF16
AL32UTF8
クライアントやサーバーのキャラクタ・セットとしてあげられている以外のキャラクタ・セットまたは各国語キャラクタ・セットを指定したり、クライアントのNLS_LANG
に言語を設定したりすると、次のエラーが発生します。
ORA-12734
ORA-12735
ORA-12736
ORA-12737
Instant Client Lightでは、エラー・メッセージは英語でのみ出力されます。したがって、NLS_LANG
設定に有効な値は、次のようになります。
American_territory.characterset
territory
にはサポートされる有効な地域を、characterset
には前述のいずれかのキャラクタ・セットを指定できます。
Instant Client Lightは、OCI_UTF16モードで作成されたOCI環境ハンドルを使用して動作します。
関連項目: NLS設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
Instant Client Lightモードで動作するには、アプリケーションで、UNIXシステムの場合はLD_LIBARARY_PATH
環境変数を、Microsoft Windowsの場合はPATH
環境変数を、クライアントおよびデータ共有ライブラリが格納されている場所に設定する必要があります。OCIアプリケーションは、デフォルトでOCIデータ共有ライブラリ、つまりUNIXシステムではLD_LIBRARY_PATH
環境変数のlibociei.so
、Microsoft WindowsではPATH
環境変数のoraociei11.dll
データ共有ライブラリを検索して、アプリケーションがInstant Clientモードで動作するかどうかを判断します。このライブラリが見つからない場合、OCIは、Instant Client Lightのデータ共有ライブラリ、つまりUNIXシステムではlibociicus.so
、Microsoft Windowsではlibociicus11.dll
をロードしようとします。このライブラリが見つかった場合、アプリケーションはInstant Client Lightモードで動作します。このライブラリが見つからない場合は、Instant Client以外のモードとなります。
Instant Client Lightは、次のいずれかの方法でインストールできます。
OTNから
次のサイトから必要なファイルをダウンロードできます。
http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html
Instant Client Lightの場合は、Basicパッケージをダウンロードして展開するかわりに、Basic Lightパッケージをダウンロードして解凍します。解凍する前に、軽量ライブラリを解凍するinstantclient_11_2
ディレクトリを空にしてください。
Client Admin Installから
libociei.so
またはoraociei11.dll
をORACLE_HOME
/instantclient
ディレクトリからコピーするかわりに、libociicus.so
またはoraociic10.dll
をORACLE_HOME
/instantclient/light
ディレクトリからコピーします。つまり、UNIXシステムの場合、LD_LIBRARY_PATH
環境変数のInstant Clientディレクトリに、大規模なOCI Instant Clientのデータ共有ライブラリlibociei.so
ではなく、Instant Client Lightのデータ共有ライブラリlibociicus.so
を格納してください。Microsoft Windowsの場合、PATH
環境変数にはoraociei11.dll
ではなくoraociei11.dll
を指定する必要があります。
Oracle Universal Installerから
Oracle Universal InstallerでInstant Clientオプションを選択すると、libociei.so
(Microsoft Windowsの場合はoraociei11.dll
)が、インストールのベース・ディレクトリにインストールされ、LD_LIBRARY_PATH
環境変数には、このディレクトリが指定されます。このため、Instant Client Lightはデフォルトでは使用できません。Instant Client Lightのデータ共有ライブラリlibociicus.so
(Microsoft Windowsの場合はoraociicus11.dll
)は、ベース・ディレクトリのlight
サブディレクトリにインストールされます。したがって、Instant Client Lightモードで動作するには、OCIデータ共有ライブラリlibociei.so
(Windowsではoraociei11.dll
)を削除するか、名前を変更し、Instant Client Lightのデータ共有ライブラリを、インストールのlight
サブディレクトリからベース・ディレクトリにコピーする必要があります。
たとえば、Oracle Universal Installerで、Instant ClientをLD_LIBRARY_PATH
環境変数のmy_oraic_11_1
ディレクトリにインストールした場合、Instant Client Lightモードで動作するには、次のようにします。
cd my_oraic_11_1 rm libociei.so mv light/libociicus.so .
注意: Instant Clientファイルは、必ず空のディレクトリにコピーまたはインストールしてください。これは、インストール時に互換性のないバイナリが存在しないようにするためです。 |