この章は、次の項目で構成されています。
Oracle Call Interface(OCI)は、Application Program Interface(API)の1つです。OCIを使用すると、ファンクション・コールを使用してOracleデータベース・サーバーにアクセスし、SQL文の実行のすべてのフェーズを制御するアプリケーションを作成できます。OCIでは、C言語とC++言語のデータ型、コール規則、構文およびセマンティックをサポートします。
OCIは次の機能を備えています。
システム・メモリーおよびネットワーク接続の効率的な使用によるパフォーマンスと拡張性の向上
2層クライアント/サーバーまたは複数層環境での動的セッションおよびトランザクション管理に適した一貫性のあるインタフェース
N層認証
Oracleオブジェクトを使用したアプリケーション開発の包括的サポート
外部データベースへの接続
ハードウェアへの追加投資をすることなく、ユーザー数および要求数の増加をサポートするアプリケーション
OCIでは、Cプログラミング言語を使用してOracleデータベース内のデータおよびスキーマを操作できます。標準的なデータベース・アクセスと検索機能のライブラリが動的ランタイム・ライブラリ(OCIライブラリ)の形で用意されており、実行時にアプリケーションにリンクできます。
OCIは多くの新機能を備えており、主に次のように分類できます。
ユーザー認証およびパスワード管理の簡易化
アプリケーションのパフォーマンスおよび拡張性を向上させる拡張機能
トランザクション管理に適した一貫性のあるインタフェース
クライアント側からのOracleオブジェクトに対するアクセスをサポートするOCI拡張機能
Oracleデータベースに接続する場合、OCIには次のような大きな利点があります。
アプリケーション設計のあらゆる側面におけるきめ細かい制御
プログラム実行に対する高度な制御
使い慣れた第三世代言語プログラミング手法およびブラウザやデバッガなどのアプリケーション開発ツールの使用
スケーラブルなアプリケーション作成を可能にする接続プーリング、セッション・プーリングおよび文キャッシュ
動的SQLのサポート
様々なオペレーティング・システムに対応したOracleプログラム・インタフェースの可用性
コールバックを使用した動的バインドおよび定義
サーバー・メタデータのレイヤーを公開する記述機能
登録されたクライアント・アプリケーションへの非同期イベント通知
配列の挿入、更新、削除を行うための高度な配列データ操作言語(DML)機能
コミット要求の実行への関連付けによるラウンドトリップ回数の削減
透過的プリフェッチ・バッファを使用した問合せの最適化によるラウンドトリップ回数の削減
OCIハンドルに対する相互排他ロック(mutex)を不要にするスレッド・セーフティ
OCIプログラムは非データベース・アプリケーションと同様の方法でコンパイルおよびリンクできます。処理前のステップやプリコンパイル・ステップを別途行う必要はありません。
一般に普及しているほとんどのサード・パーティのコンパイラをサポートしています。OCIプログラムのリンクの詳細は、システムによって異なります。一部のオペレーティング・システムでは、OCIプログラムを正常にリンクさせるために、OCIライブラリに加えて他のライブラリの組込みが必要になる場合があります。オペレーティング・システムでのOCIアプリケーションのコンパイルとリンクの詳細は、使用システムに関するOracleマニュアルとインストレーション・ガイドを参照してください。
OCIは次の機能を備えています。
多数のユーザーを安全にサポートできるスケーラブルなマルチスレッド・アプリケーションを設計するためのAPI
データベース・アクセス、SQL文の処理およびOracleデータベース・サーバーから取り出したオブジェクトの操作を行うためのSQLアクセス関数
Oracle型のデータ属性を操作するためのデータ型マッピングおよび操作関数
SQL文を使用せずにデータベースにデータを直接ロードするためのデータ・ロード関数
PL/SQLからC言語のコールバックを書き込むための外部プロシージャ関数
OCIを使用すると、SQLの非プロシージャ型データ・アクセス機能と、CやC++言語の手続き型機能をあわせ持つ複数層アーキテクチャ上で、スケーラブルなマルチスレッド・アプリケーションを開発できます。
非手続き型言語のプログラムでは、操作対象となる一連のデータが指定されますが、実行する操作の種類や操作の方法は指定されません。SQLは非手続き型という性質上、習得しやすく、データベース・トランザクションを実行しやすい言語です。また、SQLは、先進のリレーショナル・データベース・システムおよびオブジェクト・リレーショナル・データベース・システムのデータに対するアクセスや操作に使用する標準言語となっています。
手続き型言語のプログラムでは、大部分の文の実行は、前または後続の文、およびループや条件ブランチなどSQLでは利用できない制御構造に依存しています。手続き型という性質上、このような言語はSQLよりも複雑ですが、柔軟性に富み、非常に強力です。
OCIプログラムでは、非手続き型言語と手続き型言語の要素が組み合されているため、構造化プログラミング環境でOracleデータベースに容易に接続できます。
OCIでは、Oracleデータベース・サーバーを通じて使用可能なSQLのデータ定義、データ操作、問合せおよびトランザクション制御の機能をすべてサポートしています。たとえば、OCIプログラムでは、Oracleデータベースに対する問合せを実行できます。問合せ文では、次の例のように、入力(バインド)変数を使用して、データベースにデータを渡すようにプログラムに対して指示できます。
SELECT name FROM employees WHERE empno = :empnumber;
前述のSQL文の:empnumber
は、アプリケーションが指定する値に対するプレースホルダです。
また、Oracleが開発したSQLの手続き型拡張要素であるPL/SQLも利用できます。PL/SQLにより、SQLのみで作成されたアプリケーションよりも、さらに強力で柔軟性のあるアプリケーションを開発できます。OCIは、Oracleデータベース・サーバー内のオブジェクトに対するアクセスおよび操作のための機能も提供します。
OCIには、オブジェクト型とオブジェクトを処理する機能があります。オブジェクト型は、ユーザー定義のデータ構造体で、現実社会の実体を抽象的に表します。たとえば、データベースにperson
(個人)というオブジェクトの定義が含まれているとします。このオブジェクトは、個人を識別するための特徴を表した属性first_name
、last_name
およびage
を持つことができます。
オブジェクト型の定義は、オブジェクト型のインスタンスを表すオブジェクトの作成の基礎となります。オブジェクト型を構造的な定義として使用することで、たとえば、あるperson
オブジェクトを属性値'John'、'Bonivento'および'30'から作成することができます。オブジェクト型にはメソッド、つまりそのオブジェクト型の動作を表現するプログラム関数を含めることもできます。
OCIには、Oracleデータベース・サーバー内のオブジェクト処理用にOCIの機能を拡張した関数が組み込まれています。具体的には、次の機能がOCIに追加されました。
オブジェクト・データとスキーマ情報を操作するSQL文の実行
SQL文の入力変数としてオブジェクト参照およびオブジェクトのインスタンスを渡す機能
SQL文の出力を受け取る変数として、オブジェクト参照およびオブジェクトのインスタンスの宣言
データベースからオブジェクト参照およびオブジェクトのインスタンスのフェッチ
オブジェクトのインスタンスと参照を戻すSQL文のプロパティの記述
オブジェクト・パラメータまたは結果を指定したPL/SQLプロシージャまたはファンクションの記述
オブジェクトとリレーショナル機能を同期化するための、コミット・コールとロールバック・コールの拡張
その他のOCIコールは、SQL文を通してアクセスされた後、オブジェクトの操作をサポートするために提供されます。拡張機能および新機能の詳細は、「カプセル化されたインタフェース」を参照してください。
OCIアプリケーションの主なタスクの1つは、SQL文を処理することです。SQL文の種類が異なると、プログラムでは異なる処理ステップが必要になります。OCIアプリケーションをコーディングする際には、そのことを考慮に入れることが重要です。次の種類のSQL文を認識します。
データ定義言語(DDL)
トランザクション制御
セッション制御
システム制御
データ操作言語(DML)
注意: 多くの場合、問合せはDML文として分類されますが、OCIアプリケーションでは異なる方法で問合せを処理するため、ここでは両者を別個に考慮しています。 |
データ定義言語(DDL)文は、データベース内のスキーマ・オブジェクトを管理します。DDL文は、新規の表を作成し、古い表を削除し、その他のスキーマ・オブジェクトを設定します。また、スキーマ・オブジェクトに対するアクセスを制御します。
表を作成し、その表へのアクセスを指定する例を次に示します。
CREATE TABLE employees (name VARCHAR2(20), ssn VARCHAR2(12), empno NUMBER(6), mgr NUMBER(6), salary NUMBER(6)); GRANT UPDATE, INSERT, DELETE ON employees TO donna; REVOKE UPDATE ON employees FROM jamie;
DDL文によって、Oracleデータベース内のオブジェクトを操作することもできます。次の例は、オブジェクト表を作成する一連の文です。
CREATE TYPE person_t AS OBJECT ( name VARCHAR2(30), ssn VARCHAR2(12), address VARCHAR2(50)); CREATE TABLE person_tab OF person_t;
データ操作言語(DML)文は、データベース表にあるデータを変更できます。たとえば、DML文を使用して次の処理を実行します。
表に新しい行を挿入します。
既存の行の列値を更新します。
表から行を削除します。
データベース内の表をロックします。
SQL文の実行計画を説明します。
入力(バインド)変数を使用して、データベースにデータを渡すようにアプリケーションに対して指示します。
また、DML文ではOracleデータベース内のオブジェクトを操作できます。次の例では、person_t
型のインスタンスがオブジェクト表person_tab
に挿入されます。
INSERT INTO person_tab VALUES (person_t('Steve May','123-45-6789','146 Winfield Street'));
問合せは、データベースからデータを取り出すための文です。1つの問合せで、0、1行および複数行のデータを戻すことができます。すべての問合せは、次の例のように、SQLキーワードSELECT
で始まります。
SELECT dname FROM dept WHERE deptno = 42;
問合せは、表の中のデータにアクセスするため、多くの場合DML文として分類されます。ただし、OCIアプリケーションでは問合せの処理方法が異なるため、このマニュアルでは問合せを別個のものとして扱います。
問合せ文では入力(バインド)変数を使用して、データベースにデータを渡すようにプログラムに指示できます。たとえば次のとおりです。
SELECT name FROM employees WHERE empno = :empnumber;
前述のSQL文の:empnumber
は、アプリケーションが指定する値に対するプレースホルダです。
問合せを処理する際、OCIアプリケーションでは、戻される結果を受け取るための出力変数も定義する必要があります。上の文では、問合せから戻されるname
の値を受け取るために出力変数を定義する必要があります。
関連項目:
|
PL/SQLは、Oracleが開発したSQL言語の手続き型拡張機能です。PL/SQLは、単純な問合せやSQLデータ操作言語文よりも複雑なタスクを処理します。PL/SQLを使用すると、多数の構文を単一のブロックにグループ化し、1つの単位として実行できます。これらの単位には次の部分が含まれます。
1つまたは複数のSQL文
変数宣言
代入文
プロシージャ型制御文(IF...THEN...ELSE文とループ)
例外処理
OCIプログラムでPL/SQLブロックを使用すると、次の処理を実行できます。
Oracleストアド・プロシージャおよびストアド・ファンクションのコール
複数のSQL文を指定したプロシージャ型制御文を結合し、1つの単位として実行
レコード、表、カーソルFORループ、例外処理などの特殊なPL/SQL機能へのアクセス
カーソル変数の使用
Oracleデータベース・サーバー内のオブジェクトへのアクセスおよび操作
次のPL/SQL例では、特定の従業員番号をキーにして、従業員表から値を取り出すSQL文が発行されます。この例は、PL/SQL文でのプレースホルダの使用方法も示しています。
BEGIN SELECT ename, sal, comm INTO :emp_name, :salary, :commission FROM emp WHERE empno = :emp_number; END;
この文のプレースホルダは、PL/SQL変数ではないことに注意してください。これらは、文の処理時に、Oracleに渡される入力値を示しています。これらのプレースホルダは、プログラム内でC言語変数にバインドする必要があります。
関連項目:
|
OCIは、アプリケーションが実行時にOracleに渡すテキスト文字列としてSQL文を処理します。Oracleプリコンパイラ(Pro*C/C++、Pro*COBOL、Pro*FORTRAN)を使用することによって、SQL文をアプリケーション・コードに直接埋め込むことができます。その後、実行可能なアプリケーションを生成するために別個のプリコンパイル・ステップが必要です。
OCIコールと埋込みSQLはプリコンパイラ・プログラムでは混在できます。
このマニュアルでは、SQL文の様々な部分を参照するために特殊な用語を使用しています。たとえば次のようなSQL文があります。
SELECT customer, address FROM customers WHERE bus_type = 'SOFTWARE' AND sales_volume = :sales;
このSQL文は、次の部分で構成されています。
SQLコマンド: SELECT
2つの選択リスト項目 −customer
およびaddress
FROM
句内の表名 −customers
WHERE
句内の2つの列名 −bus_type
およびsales_volume
WHERE
句内のリテラル入力値 −'SOFTWARE
'
WHERE
句内の入力変数用のプレースホルダ −:sales
OCIアプリケーションを開発する際は、プログラムの入出力変数のアドレス(位置)をOracleデータベース・サーバーに指定しているルーチンをコールします。このマニュアルでは、データ入力用のプレースホルダ変数のアドレスを指定することをバインド操作と呼びます。また、選択リスト項目を受け取る変数のアドレスを指定することを定義操作と呼びます。
PL/SQLでは、入力の指定も出力の指定もバインド操作と呼びます。これらの用語や操作については、第4章「OCIでのSQL文の使用」を参照してください。
OCIコールで使用されるすべてのデータ構造は、ハンドルと呼ばれる不透明なインタフェースの形にカプセル化されます。ハンドルとは、OCIライブラリによって割り当てられる記憶領域を指す不透明なポインタで、SQL文またはPL/SQL文のコンテキスト情報、接続情報、エラー情報またはバインド情報を格納します。クライアントでは、特定の種類のハンドルを割り当て、正しく定義されたインタフェースを通じて1つ以上のハンドルを移入し、それらのハンドルを使用してサーバーに要求を送信します。その結果、アプリケーションは、アクセッサ関数を使用してそのハンドルに含まれている特定の情報にアクセスできます。
OCIライブラリでは、ハンドルの階層が管理されます。これらのハンドルを使用してOCIインタフェースをカプセル化することには、アプリケーション開発者にとって次のような利点があります。
保持する必要があるサーバー側の状態情報の量が少なくなり、サーバー側のメモリー使用量を削減できます。
グローバル変数を使用する必要がなくなること、エラー・レポートを作成しやすくなること、OCI変数のアクセスおよび使用方法に一貫性を保てることにより、生産性が向上します。
OCI構造をハンドルの形にカプセル化することによりOCI構造が不透明になるため、アプリケーションに影響を与えずに基礎となる構造を変更できます。
OCIでは、アプリケーション開発者が、次のような簡易化されたユーザー認証およびパスワード管理を実行できます。
単一のOCIアプリケーションで、複数のユーザーを認証およびメンテナンスできます。
OCIアプリケーションで、ユーザーのパスワードを更新できます。これは、認証の処理でパスワード期限切れのメッセージが戻された場合に特に役立ちます。
OCIでは、次の2種類のログイン・セッションをサポートします。
シングル・ユーザーがログイン名とパスワードを使用してデータベースに接続するセッションのための、簡易ログイン関数。
ログイン・セッションを分割することにより、単一のOCIアプリケーションで複数のセッションの認証とメンテナンスを行うメカニズム。ログイン・セッションは、ユーザーが自分で作成したその他すべてのセッションであるユーザー・セッションから、Oracleデータベースにログインするときに作成されるセッションです。
OCIには、アプリケーションのパフォーマンスおよび拡張性を改善する、いくつかの拡張機能があります。クライアントとサーバー間のラウンドトリップ回数を減らすことにより、アプリケーションのパフォーマンスが改善されました。さらに、サーバー側で保持する必要がある状態情報の量を減らすことにより拡張性も向上しています。これらの機能には、次のものがあります。
クライアント側の処理の増加、およびサーバー側の問合せ要求の削減
記述のラウンドトリップをなくし、ラウンドトリップ回数およびメモリー使用量を削減する、SELECT
文結果セットの暗黙的なプリフェッチ
オープン・カーソルとクローズ・カーソルのラウンドトリップの排除
マルチスレッド環境のサポートの改善
接続上のセッション多重化
標準の2層クライアント/サーバー構成、サーバー/サーバー・トランザクション調整、3層TPモニター構成など、様々な構成に対する一貫したサポート
XAインタフェースのTM_JOIN操作のサポートを含む、ローカル・トランザクションおよびグローバル・トランザクションに対する一貫したサポート
接続中のユーザー接続、処理およびセッションを集結する機能を提供し、グローバル・トランザクションのブランチごとに個別のセッションを作成する必要性をなくしたことによる、拡張性の向上
アプリケーションによる複数のユーザーの認証、および複数のユーザーのためのトランザクションの開始
OCIは、Oracleサーバーのオブジェクト機能を使用するプログラマに、包括的なApplication Program Interface(API)を提供します。その機能は、次の6つの主要なカテゴリに分類できます。
クライアント側のオブジェクト・キャッシュ
オブジェクトへのアクセスおよび操作のためのアソシエイティブ・インタフェースおよびナビゲーショナル・インタフェース
オブジェクト用のランタイム環境
Oracleデータベース内のオブジェクト型の情報にアクセスするための型管理関数
Oracle型のデータ属性を制御するための型マッピングおよび操作関数
Oracle内部スキーマ情報をクライアント側の言語バインド変数にマッピングするObject Type Translator(OTT)ユーティリティ
オブジェクト・キャッシュは、オブジェクトの参照とメモリー管理をサポートするクライアント側のメモリー・バッファです。オブジェクト・キャッシュは、OCIアプリケーションがサーバーからクライアント側にフェッチしたオブジェクト・インスタンスを格納し、追跡します。オブジェクト・キャッシュは、OCI環境を初期化するときに作成されます。同じサーバーに対して実行中の複数のアプリケーションには、それぞれ専用のオブジェクト・キャッシュがあります。オブジェクト・キャッシュは、メモリーに現在あるオブジェクトの追跡、オブジェクトへの参照のメンテナンス、自動オブジェクト・スワッピングの管理、オブジェクトのメタ属性または型情報の追跡を行います。オブジェクト・キャッシュはOCIアプリケーションに次のものを提供します。
オブジェクトのフェッチおよび操作に必要なクライアント/サーバー間のラウンドトリップ回数の削減によるアプリケーションのパフォーマンスの改善
クライアント側のキャッシュからのオブジェクト・スワッピングのサポートによる拡張性の向上
オブジェクト・レベルのロックのサポートによる同時実行性の向上
OCIを使用したアプリケーションでは、次のような様々な種類のインタフェースを介して、Oracleサーバー内のオブジェクトにアクセスできます。
SQLのSELECT
文、INSERT
文およびUPDATE
文の使用
対応するスマート・ポインタまたはREFを横断することによりクライアント側のキャッシュ内のオブジェクトにアクセスする、Cスタイルのポインタ追跡スキームの使用
OCIには、SQLのSELECT
文、INSERT
文およびUPDATE
文を使用したオブジェクト操作をサポートする拡張機能を備えた、一連の関数が用意されています。Oracleオブジェクトにアクセスするために、これらのSQL文では、リレーショナル表にアクセスする場合のような一貫した一連のステップが使用されます。OCIは、オブジェクトにアクセスするために必要な一連の関数を提供します。関数は次の目的で使用されます。
オブジェクト型のインスタンスと参照をSQL文の入出力変数としてバインドおよび定義します。
オブジェクト型のインスタンスと参照を含むSQL文を実行します。
オブジェクト型のインスタンスと参照をフェッチします。
Oracleオブジェクト型の選択リスト項目を記述します。
また、OCIは、Cスタイルのポインタ追跡スキームを使用してクライアント側のキャッシュ内のオブジェクトにアクセスする一連の関数を提供しています。これらのオブジェクトは、対応するスマート・ポインタまたはREFを横断することにより、クライアント側のキャッシュ内にフェッチされます。このナビゲーショナル・インタフェースでは、関数が次の目的で使用されます。
参照可能な永続オブジェクト、つまりオブジェクトIDを持つ永続オブジェクトのスマート・ポインタまたはREF
を確保することにより、そのオブジェクトのコピーをクライアント側のキャッシュにインスタンス化します。
互いを指すREF
を横断することにより、相互に接続されている一連のオブジェクトを横断します。
オブジェクト属性の値を動的に取得し、設定します。
OCIは、オブジェクト用の関数を提供します。この関数は、Oracleオブジェクトのクライアント側での使用方法を管理します。このOCI関数は、次の目的で使用されます。
セッションの初期化、データベース・サーバーへのログイン、接続の登録などのオブジェクト機能にアクセスするための、Oracleサーバーへの接続
クライアント側のオブジェクト・キャッシュの設定およびそのパラメータのチューニング
エラーおよび警告メッセージの取得
サーバー内のオブジェクトにアクセスするトランザクションの制御
SQLによるオブジェクトへの結合アクセス
パラメータまたは結果がOracleタイプであるPL/SQLプロシージャまたはファンクションの記述
OCIは、Oracleオブジェクトを操作するための2つの関数セットを提供します。
型マッピング関数を使用すると、アプリケーションで、Oracle内部データ型としてサーバー内に表されているOracleスキーマの属性を、対応するホスト言語型にマップできます。
型操作関数を使用すると、ホスト言語のアプリケーションで、Oracleスキーマの個別の属性を操作できます。属性の値を設定および取得したりサーバーにフラッシュできます。
また、OCIDescribeAny()
関数を使用すると、データベース内に格納されたオブジェクトの情報を取得できます。
Object Type Translator(OTT)ユーティリティは、Oracleオブジェクト型のスキーマ情報を、構造体などのホスト言語変数のクライアント側言語バインドに変換します。OTTは、Oracleスキーマ・オブジェクトのメタデータ情報が含まれるintype
ファイルを入力として使用します。OTTは、次にouttype
ファイルおよび必要なヘッダー・ファイルと実装ファイルを生成します。このヘッダー・ファイルと実装ファイルは、オブジェクト・スキーマに対して実行するCアプリケーションに組み込む必要があります。OCIアプリケーションおよびPro*C/C++プリコンパイラ・アプリケーションには、OTTで生成したコードを組み込むことができます。OTTには次のような多くの利点があります。
アプリケーション開発者の生産性が向上します。OTTを使用すると、アプリケーション開発者はスキーマ・オブジェクトに対応するホスト言語変数をコーディングする必要がなくなります。
SQLを、選択したデータ定義言語としてメンテナンスします。OTTでは、SQLを使用して作成したOracleスキーマ・オブジェクトをホスト言語変数に自動的にマップできるため、SQLがデータ定義言語として使用しやすくなります。その結果、Oracleによって、データの一貫したモデルをサポートできます。
オブジェクト型のスキーマ展開を容易にします。OTTでは、スキーマが変更されたときにインクルードされたヘッダー・ファイルを再生成できるため、Oracleアプリケーションでスキーマ展開をサポートできます。
通常、OTTは、コマンドラインからintype
ファイル、outtype
ファイルおよび特定のデータベース接続を指定することにより起動されます。OracleのOTTでは、OCIプログラムとPro*C/C++プリコンパイラ・プログラムのどちらでも使用できるC構造体のみが生成されます。
OCIでは、Oracle Streams Advanced Queuing(Streams AQ)機能へのインタフェースを提供します。Streams AQは、Oracleサーバーと統合されたメッセージ・キューイングです。Streams AQのメッセージ・キューイングでは、キューイング・システムをデータベースと統合し、メッセージ対応データベースを作成する機能を提供しています。Streams AQでは、統合されたソリューションを提供することにより、開発者がメッセージ交換インフラストラクチャを構築する必要をなくし、特定のビジネス・ロジックに専念できるようにします。
OCIは、Oracle XAライブラリをサポートしています。xa.h
ヘッダー・ファイルは、他のすべてのOCIヘッダー・ファイルと同じ場所にあります。LinuxまたはUNIXの場合、パスは$ORACLE_HOME/rdbms/public
です。LinuxまたはUNIXでdemo_rdbms.mk
ファイルを使用しているユーザーは影響を受けません。ディレクトリ$ORACLE_HOME/rdbms/public
はすでにこのファイルに記載済のためです。
Windowsの場合、パスはORACLE_BASE\ORACLE_HOME
¥oci¥include
です。
関連項目:
|
次の項では、異なるリリースのOCIクライアントとサーバー間での互換性の問題、OCIライブラリ・ルーチンの変更点およびOCIリリース7.xからこのリリースのOCIへのアプリケーションのアップグレードについて説明します。
次に、新規リリースで再リンクする場合の規則を示します。
静的にリンクされたOCIアプリケーションの場合:
静的にリンクされたOCIアプリケーションは、メジャー・リリース番号とマイナー・リリース番号の両方について再リンクする必要があります。これは、Oracle Client側のライブラリ・コードが、アップグレードされたORACLE_HOME
内のエラー・メッセージと互換性がないためです。たとえば、エラー・メッセージが追加パラメータで更新された場合、そのエラー・メッセージは、静的にリンクされたコードとは互換性がありません。
動的にリンクされたOCIアプリケーションの場合:
10g以降のリリースの動的にリンクされたOCIアプリケーションは、再リンクする必要はありません。つまり、Oracle Client側の動的ライブラリには、以前のバージョンのライブラリに対して上位互換性があります。Oracle Installerにより、現行バージョンに解決される以前のバージョンのライブラリ用にシンボリック・リンクが作成されます。したがって、以前のバージョンのOracle Client側動的ライブラリと動的にリンクされたアプリケーションは、現行バージョンのOracle Client側ライブラリで動作するために再リンクする必要はありません。
注意: アプリケーションがランタイム・ライブラリ検索パス(Linuxの -rpath など)とリンクされている場合、アプリケーションはリンクされているOracle Client側のライブラリのバージョンで動作する可能性があります。現行バージョンのOracle Client側のライブラリで動作するためには、再リンクする必要があります。 |
関連項目:
|
OCIでは、多くの機能が大幅に改善されました。OCIリリース7.xのクライアントとこのリリースのサーバー、およびこのリリースのクライアントとOracle7サーバーにはそれぞれ相互運用性があるため、OCIリリース7.xを使用するように作成したアプリケーションは、このリリースのOCIに容易に移行できます。
具体的には次のとおりです。
OCIリリース7.3 APIを使用していたアプリケーションは、このリリースのサーバーに対して通常どおり動作します。これらのアプリケーションは、現行のクライアント・ライブラリにリンクする必要があります。
OCIリリース7.xおよびこのリリースのOCIのコールは、同じ文の実行で混在させないかぎり、同一アプリケーションおよび同一トランザクション内で使用できます。
このため、既存のOCIバージョン7のアプリケーションを移行する場合は、次の2つの方法があります。
現行のOCIクライアントにアップグレードしますが、アプリケーションは修正しません。Oracle7 OCIクライアントから現行リリースのOCIクライアントにアップグレードする場合は、新しいバージョンのOCIライブラリのリンクのみを実行します。アプリケーションを再コンパイルする必要はありません。再リンクしたOracle7 OCIアプリケーションは、現行サーバーに対して通常どおり動作します。
現行のOCIクライアントにアップグレードして、アプリケーションを修正します。ただし、新しいOCIで提供されるパフォーマンスと拡張性の利点を活用するには、新しいOCIプログラミング・パラダイムを使用できるように既存のアプリケーションを修正して、そのアプリケーションを新しいOCIライブラリに再リンクし、現行リリースのサーバーに対して実行する必要があります。
現行リリースのサーバーのオブジェクト機能を使用する必要がある場合は、クライアントをこのリリースのOCIにアップグレードする必要があります。
OCIリリース8.0では、リリース7.3で利用できなかった新しい関数セットを導入しました。このリリース7.3の関数は、引き続きサポートされています。以前のリリース7.xコールの多くを使用できますが、パフォーマンスを向上し、機能性を高めるために、新しいアプリケーションで新しいコールを使用することをお薦めします。
表1-1「使用されなくなったOCI関数」は、リリース7.xのOCIコールおよび以降のリリースでの等価コールのリストです。OCIコールの詳細は、このマニュアルの関数の説明を参照してください。リリース7.xコールの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。これらのリリース7.xコールは廃止されています。つまり、OCIではこれらが新しいコールで置き換えられています。廃止されたコールはこの時点ではサポートされていますが、OCIの将来のバージョンではサポートされない可能性があります。
注意: 多くの場合、新しいOCIルーチンはリリース7.xのルーチンに直接マッピングを行わないため、ファンクション・コールとパラメータ・リストを単純に別のものに置き換えることができない場合があります。この場合、新しいコールを作成する前後に、追加のプログラム・ロジックが必要になります。詳細は、このマニュアルの残りの章を参照してください。 |
表1-1 使用されなくなったOCI関数
7.xのOCIルーチン | 以降のリリースでの等価または類似のOCIルーチン |
---|---|
|
|
|
|
|
なし |
|
注意: リリース8.x以上では、カーソルは使用されていません。 |
|
|
|
|
|
|
|
注意: スキーマ・オブジェクトはOCIDescribeAny()で記述されます。通常、記述は、リリース7.xで使用されているように、SQL文の実行後にOCIAttrGet()を文ハンドルでコールすることにより行われます。 |
|
|
|
|
|
|
|
|
|
|
|
なし |
|
|
|
|
|
|
|
注意: 非ブロック化モードは、 |
|
注意: リリース8.x以上では、カーソルは使用されていません。 |
|
なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
注意: 前述のodescr()を参照してください。 |
|
|
|
|
|
|
|
注意: 前述の |
|
注意: 前述の |
OCIの以前のバージョンで使用可能だったOCIルーチンの一部は、以降のリリースではサポートされません。それらのルーチンのリストを、表1-2「サポートされないOCI関数」に示します。
表1-2 サポートされないOCI関数
OCIルーチン | 以降のリリースでの等価または類似のOCIルーチン |
---|---|
|
|
|
|
|
|
|
注意: 表1-1の |
|
|
|
注意: 表1-1の |
この項では、異なるリリースのOCIおよびOracleサーバー間の互換性について説明します。
リリース7.x以上の新しいコールを使用していない既存の7.xアプリケーションは、新しいクライアント側ライブラリに再リンクする必要があります。
このアプリケーションでは、Oracle8i 以上のオブジェクト機能が使用できません。また、これらのOCIリリースで提供されるパフォーマンスや拡張性も利用できません。
プログラマがリリース7.x以上の機能を既存のOCIアプリケーションに取り込む場合は、次の2つの選択肢があります。
アプリケーションを完全にリライトして、新しいOCIコールのみを使用(推奨)
リリース7.x以上の新しいOCIコールをアプリケーションに取り込む一方で、一部の操作にはリリース7.xコールを使用
このマニュアルでは、既存のアプリケーションをリライトして新しいOCIコールのみを使用するために必要な情報を提供しています。
次のガイドラインは、プログラマが新しいOCIコールを使用して新しいOracleのデータ型および機能を取り込む一方で、一部の操作にはリリース7.xコールを使用する場合に適用されます。
既存のログインを変更して、olog()
(または他のログイン・コール)のかわりにOCILogon()
を使用します。サービス・コンテキスト・ハンドルは、新しいOCIコールで使用できます。または、リリース7.xのOCIコールで使用されるLda_Def
に変換できます。
サーバー・コンテキスト・ハンドルを初期化した後は、リリース7.x以上のOCIコールで使用できます。
リリース7 OCIコールを使用するには、OCISvcCtxToLda()
を使用してサーバー・コンテキスト・ハンドルをLda_Def
に変換し、結果のLda_Def
をリリース7.xコールに渡します。
注意: 同じサーバー・ハンドルを共有する複数のサービス・コンテキストがある場合、Oracleバージョン7モードでは常に1つのサービス・コンテキストのみ可能です。 |
リリース7.x以上のOCIコールの使用を再開する場合は、アプリケーションでOCILdaToSvcCtx()
を使用してLda_Def
をサーバー・コンテキスト・ハンドルに変換しなおす必要があります。
アプリケーションでは、必要に応じて、Lda_Def
とサーバー・コンテキストを切り替えることができます。
このアプローチを行うと、アプリケーションで、単一の接続で2つの異なるAPIを使用して異なるタスクを達成できます。
リリース7.xのOCIコールとリリース7.x以上のOCIコールを混在させることは、トランザクション内では可能ですが、文内ではできません。これにより、あるSQL文またはPL/SQL文をリリース7.xのOCIコールで実行し、そのトランザクション内で、次のSQL文またはPL/SQL文を7.x以上のOCIコールで実行できます。
注意: カーソルをオープンして、リリース7.xのOCIコールで解析し、次にリリース7.x以上のOCIコールで文を実行することはできません。 |
Instant Client機能を使用すると、ORACLE_HOME
を使用する必要がなくなるため、OCI、OCCI、ODBCおよびJDBC-OCIベースのカスタマ・アプリケーションを非常に簡単にデプロイできます。Instant Clientモードで実行されるOCIアプリケーションの記憶領域の所要量は、クライアント側の完全インストールで実行される同じアプリケーションに比べて、大幅に少なくなります。Instant Client共有ライブラリは、クライアントの完全インストールのディスク領域のうち、4分の1のみを使用します。
READMEファイルが含まれています。このファイルは、バージョン、日時および生成されたオペレーティング・システムについて説明しています。
表1-3に、OCIアプリケーションのデプロイに必要なOracle Client側ファイルを示します。
表1-3 OCI Instant Client共有ライブラリ
LinuxおよびUNIX | LinuxおよびUNIXでの説明 | Windows | Windowsでの説明 |
---|---|---|---|
|
クライアント・コード・ライブラリ |
|
アプリケーションがリンクする転送機能 |
|
OCI Instant Clientデータの共有ライブラリ |
|
データとコード |
|
セキュリティ・ライブラリ |
|
セキュリティ・ライブラリ |
|
記号表 |
DLLごとに.sym
ファイルが提供されており、DLLと同じ場所に置いた場合、WindowsでOCIに障害が発生した際に、関数名を含むスタック・トレースが生成されます。
この表では、Oracle Database 11g リリース1のライブラリ名を使用しています。
Microsoft ODBCおよびOLEDBドライバを使用するには、ORACLE_HOME
\binからociw32.dll
もコピーする必要があります。
Instant Clientを使用するのはなぜか。理由:
インストールの際にコピーされるファイルの数が少なくてすみます。
Oracle Client側で必要なファイル数およびディスク領域の合計が、大幅に少なくなります。
Instant Clientモードでデプロイされたアプリケーションで、機能またはパフォーマンスが損なわれることはありません。
独立したソフトウェア・ベンダーは、アプリケーションを簡単にパッケージ化できます。
Instant Clientライブラリは、Oracle Universal InstallerからInstant Clientオプションを選択した場合にもインストールされます。Instant Clientライブラリは、次に示すOTN(Oracle Technology Network)のWebサイトからダウンロードすることもできます。
http://www.oracle.com/technology/tech/oci/instantclient/index.html
次に示すように、インストール・プロセスは簡単です。
Instant Client共有ライブラリを、instantclient_11_1
などのディレクトリにダウンロードしてインストールします。基本パッケージを選択します。
オペレーティング・システム共有ライブラリ・パス環境変数を、手順1のディレクトリに設定します。 たとえば、LinuxまたはUNIXでは、LD_LIBRARY_PATH
をinstantclient_11_1
に設定します。Windowsでは、PATH
をinstantclient_11_1
ディレクトリがある場所に設定します。
必要に応じて、NLS_LANG
を使用して、クライアント・システムの言語、地域およびキャラクタ・セットをリセットします。
前述の手順を完了すると、OCIアプリケーションを実行できるようになります。
オペレーティング・システムのライブラリ・パス変数によってOCI共有ライブラリにアクセスできる場合、OCIアプリケーションは、Instant Clientモードで動作します。このモードでは、ORACLE_HOME
への依存性はありません。ORACLE_HOME
に指定された他のコードおよびデータファイルは、OCIでは不要です(後で説明するtnsnames.ora
ファイルを除きます)。
Instant Clientライブラリは、Oracle Universal InstallerからInstant Clientオプションを選択することでインストールできます。インストール先は空のディレクトリである必要があります。Instant Clientモードで操作できるようにするには、OTNのインストールと同様に、LD_LIBRARY_PATH
をInstant Clientディレクトリに設定する必要があります。
(Admin
オプションを選択して)クライアントの完全インストールを行った場合、Instant Client共有ライブラリもインストールされます。クライアントの完全インストールにおけるInstant Client共有ライブラリの場所は、次のとおりです。
LinuxまたはUNIXの場合:
libociei.so
ライブラリは、$ORACLE_HOME/instantclient
にあります。
libclntsh.so.11.1
およびlibnnz11.so
は、$ORACLE_HOME/lib
にあります。
Windowsの場合:
oraociei11.dll
ライブラリは、ORACLE_HOME¥instantclient
にあります。
oci.dll
、ociw32.dll
およびorannzsbb11.dll
は、ORACLE_HOME¥bin
にあります。
前述のライブラリを別のディレクトリにコピーして、オペレーティング・システム共有ライブラリ・パスをこのディレクトリがある場所に設定することで、OCIアプリケーションをInstant Clientモードで実行できるようになります。
注意: すべてのライブラリを同じ ORACLE_HOME からコピーして、同じディレクトリに配置する必要があります。 Instant Clientライブラリへのsymlinkの関連付けは、ライブラリの物理的な関連付けに代わるものではありません。
オペレーティング・システムのLibrary Path変数に存在するOracleライブラリは1セットのみである必要があります。つまり、Instant Clientライブラリを含むディレクトリが複数ある場合、それらのディレクトリの1つのみをオペレーティング・システムのLibrary Path上に記載する必要があります。 同様に、 |
OCCIやJDBC-OCIなど、その他の機能を有効にするには、他のファイルをいくつかコピーする必要があります。 特に、JDBC OCIドライバの場合、3つのOCI共有ライブラリ以外に、OCI JDBCライブラリ(LinuxまたはUNIXではlibocijdbc11.so
、Windowsではocijdbc11.dll
など)もダウンロードする必要があります。すべてのライブラリがInstant Clientディレクトリに存在する必要があります。
注意: Sparc64などのハイブリッド・プラットフォームでは、JDBC OCIドライバがInstant Clientモードで動作する必要がある場合、 ORACLE_HOME/instantclient32 ディレクトリからlibociei.so ライブラリをコピーする必要があります。JDBC OCI Instant Clientに必要なSparc64ライブラリはすべて、ORACLE_HOME/lib32 ディレクトリからコピーする必要があります。 |
OCCIでは、OCCIライブラリ(LinuxまたはUNIXではlibocci.so.11.1
、Windowsではoraocci11.dll
)は、Instant Clientディレクトリにインストールする必要があります。
Instant Clientはデプロイメント用の機能であるため、本番アプリケーションの実行に使用する必要があります。通常、すべてのOCI機能は、Instant Clientモードで実行されるアプリケーションに使用できます。ただし、Instant Clientモードは、クライアント側の操作でのみ使用される機能です。したがって、サーバー側の外部プロシージャは、Instant Clientモードでは動作しません。
開発には、Instant Client SDKを使用することもできます。
Instant Clientはデプロイメント用の機能であるため、OCIアプリケーションの実行に必要なファイル(クライアント・フットプリント)の数およびサイズを減らすことが重視されています。したがって、Instant Client共有ライブラリにパッチを適用するために必要なファイルは、Instant Clientによるデプロイメントですべて入手できるわけではありません。Instant Client共有ライブラリにパッチを適用するには、ORACLE_HOME
ベースのクライアントの完全インストールが必要です。opatch
ユーティリティで、Instant Client共有ライブラリにパッチを適用します。
ORACLE_HOME
環境にパッチを適用した後、「OCI Instant Clientのインストール・プロセス」の説明に従って、表1-3「OCI Instant Client共有ライブラリ」にリストされているファイルをInstant Clientディレクトリにコピーします。
個々のファイルをコピーするかわりに、「データ共有ライブラリ、zipおよびRPMファイルの再生成」の説明に従って、OCI/OCCI、JDBCおよびSQL*Plus用のInstant Client zipおよびRPMファイルを生成できます。次に、「OCI Instant Clientのインストール・プロセス」に従うと、zipおよびRPMファイルをターゲット・システムにコピーして解凍でき、前述の個々のファイルをコピーする必要はありません。
opatch
ユーティリティによって、ORACLE_HOME
インストールのパッチ適用情報がlibclntsh.so
に格納されます。この情報を取り出すには、次のコマンドを使用します。
genezi -v
Instant Clientのデプロイメント・システムにgenezi
ユーティリティがない場合、ORACLE_HOMEシステムのORACLE_HOME/binディレクトリからそれをコピーする必要があります。
注意: opatch ユーティリティは、Windowsでは使用できません。 |
OCI Instant Clientデータ共有ライブラリ(libociei.so
)は、ORACLE_HOME
の管理者インストールで次の手順を実行することで再生成できます。
mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ilibociei
新たに生成されたlibociei.so
はORACLE_HOME/instantclient
ディレクトリに入れられますが、この同じディレクトリにある元の既存libociei.so
は、libociei.so0
という名前に変更されます。
ハイブリッド・プラットフォームでの32ビット・モードの手順:
mkdir -p $ORACLE_HOME/rdbms/install/instantclient32/light cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ilibociei32
前述の手順で、OCI/OCCI、JDBCおよびSQL*Plus用のInstant Client zipファイルおよびRPMファイルも生成されます。
新しいzipおよびRPMファイルは下記に生成されます。
64ビット・モードは$ORACLE_HOME/rdbms/install/instantclient
、32ビット・モードは$ORACLE_HOME/rdbms/install/instantclient32
。
データ共有ライブラリ、zipおよびRPMファイルの再生成は、Windowsプラットフォームでは使用できません。
注意: 再生成されたInstant Clientバイナリは、再生成を行ったOracle Client AdministratorホームでインストールされたInstant Clientファイルのみを含みます。そのため、再生成環境に存在するエラー・メッセージ、キャラクタセット・エンコーディングおよびタイムゾーン・ファイルは、再生成されたバイナリでパッケージされているもののみです。エラー・メッセージ、キャラクタセット・エンコーディングおよびタイムゾーン・ファイルは、Oracle Client Administratorホームのインストールで選択された各国語に依存します。 |
OCI Instant Clientからは、通常のSQLクライアントで可能なすべての方法で、リモート・データベースに接続できます。ただし、Instant ClientにはORACLE_HOME
の環境およびディレクトリ構造がないため、一部のデータベース・ネーミング・メソッドには追加の構成手順が必要です。
(tnsnames.ora
またはsqlnet.ora
などの構成ファイルを検索するために)ORACLE_HOME
またはTNS_ADMIN
を使用する必要のない、すべてのOracle Netネーミング・メソッドは、Instant Clientモードで動作します。特に、OCIServerAttach()
コールのconnect_identifier
は、次の形式で指定できます。
SQL接続URL文字列のフォームは、次のようになります。
[//]host[:port][/service name]
次に例を示します。
//dlsun242:5521/bjava21
Oracle Net接続記述子としては、たとえば、次のようにします。
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=dlsun242) (PORT=5521)) (CONNECT_DATA=(SERVICE_NAME=bjava21)))"
サイトがLDAPサーバー・ディレクトリ用に構成されているディレクトリ・ネーミングを通じて解決される接続名
tnsnames
などのネーミング・メソッドやディレクトリ・ネーミングを使用するには、TNS_ADMIN
環境変数を設定する必要があります。
TNS_ADMIN
環境変数が設定されていない場合に、inst1
などのTNSNAMES
エントリを使用するときは、ORACLE_HOME
変数を設定する必要があります。また、構成ファイルは$ORACLE_HOME/network/admin
ディレクトリに存在する必要があります。
この場合、ORACLE_HOME
変数は、Oracle Net構成ファイルの検索のみに使用され、クライアント・コード・ライブラリの他のコンポーネント(OCI、NLSなど)は、ORACLE_HOME
の値を使用しません。
OCIServerAttach()
コールで接続文字列としてNULL
文字列""を使用する場合、TWO_TASK
環境変数をconnect_identifier
に設定できます。Windowsプラットフォームでは、TWO_TASK
のかわりにLOCAL
環境変数を使用します。
SQL*PlusなどのOCIコマンド・ライン・アプリケーションと同様に、TWO_TASK
(WindowsではLOCAL
)環境変数をconnect_identifierに設定できます。この環境変数には、通常の接続文字列上で'@'より右側であれば、任意の値を指定できます。
SQL*PlusをInstant Clientモードで使用するには、接続識別子を次のように指定します。
Oracleデータベース・サーバーの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)) )
SQL*Plus接続識別子は次のようになります。
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=server6)(PORT=1573))(CONNECT_DATA= (SERVICE_NAME=rdbms3.server6.us.alchemy.com)))"
または
"//server6:1573/rdbms3.server6.us.alchemy.com"
または、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
その後、空の接続識別子でSQL*Plusを起動します(パスワードの入力を求められます)。
sqlplus user
接続記述子は、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
(WindowsではLOCAL
)を次のように設定できます。
setenv TNS_ADMIN /home/webuser/instantclient
その後、接続識別子conn_str
を使用して、SQL*Plusを起動するか、OCI接続を行います。
注意: TNS_ADMIN には、tnsnames.ora ファイルを配置するディレクトリを指定します。TNS_ADMIN はtnsnames.ora ファイルのフル・パスではありません。 |
前述のtnsnames.ora
ファイルがORACLE_HOME
ベースのインストールで/network/server6/home/dba/oracle/network/admin
ディレクトリに配置されている場合、ORACLE_HOME
環境変数は次のように設定できます。
setenv ORACLE_HOME /network/server6/home/dba/oracle
また、前述のように識別子conn_str
を使用して、SQL*Plusを起動できます。
最後に、tnsnames.ora
がTNS_ADMIN
またはORACLE_HOME
で位置を特定できる場合、TWO_TASK
を次のように設定できます。
setenv TWO_TASK conn_str
その後、接続識別子なしでSQL*Plusを起動できます。
ORACLE_HOME
環境変数は、NLS、COREおよびエラー・メッセージ・ファイルの場所を決定しなくなりました。OCI専用アプリケーションでは、ORACLE_HOME
を設定しないでください。ただし、設定した場合でも、OCIの動作には影響しません。OCIは、データ共有ライブラリからデータを常に取得します。データ共有ライブラリが使用できない場合のみORACLE_HOME
が使用され、クライアントの完全インストールとみなされます。ORACLE_HOME
を設定する必要がない場合に、設定するときは、ディレクトリを識別する有効なオペレーティング・システム・パス名に設定する必要があります。
動的ユーザー・コールバック・ライブラリをロードする場合は、このマニュアルで指定されているように、ORACLE_HOME/lib
(Windowsでは(ORACLE_HOME¥bin
)にコールバック・パッケージが存在する必要があります。したがって、この場合はORACLE_HOME
を設定する必要があります。
Instant Clientモードでは、環境変数ORA_NLS10
およびORA_NLS_PROFILE33
は無視されます。
Instant Clientモードでは、ORA_TZFILE
変数が設定されていない場合、データ共有ライブラリにある、より小さいデフォルトのtimezone.dat
ファイルが使用されます。データ共有ライブラリにある、より大きいtimezlrg.dat
ファイルが使用される場合は、絶対パス名または相対パス名を使用せずに、ORA_TZFILE
環境変数をファイルの名前に設定します。つまり、LinuxまたはUNIXの場合、次のようにします。
setenv ORA_TZFILE timezlrg.dat
Windowsの場合:
set ORA_TZFILE=timezlrg.dat
(データ共有ライブラリが使用できないために)OCIがInstant Clientモードで動作していない場合、以前のOracleリリースと同様に、ORA_TZFILE
変数(設定されている場合)は、完全なパス名を付けます。
前述のように、TNSNAMES
エントリが使用される場合、TNS_ADMIN
ディレクトリにはTNSNAMES
構成ファイルが含まれる必要があります。TNS_ADMIN
が設定されていない場合、ORACLE_HOME/network/admin
ディレクトリにはOracle Net Services構成ファイルが含まれる必要があります。
Instant ClientのInstant Client Light (English)バージョンでは、クライアントのインストールに必要なディスク領域が削減されています。英語以外の言語のエラー・メッセージ・ファイルを削除し、サポートされるキャラクタ・セット定義を約250の中からわずかな数のみ残すことで、ライブラリのサイズが削減されました。
このInstant Client Lightバージョンは、US7ASCII、WE8DEC、WE8ISO8859P1、WE8MSWIN1252またはUnicodeキャラクタ・セットのいずれかを使用するアプリケーション向けです。NLS_LANG
設定のLANGUAGE
およびTERRITORY
フィールドに制限がないため、Instant Client Lightはあらゆる言語および地域設定で動作します。Instant Client Lightでは英語のエラー・メッセージのみ提供されているため、NLS_LANG
がAMERICAN
以外の言語に設定されている場合でも、Net接続エラーなどのクライアント側で生成されたエラー・メッセージは常に英語でレポートされます。データベース・インスタンスのOracleホームに適切な翻訳済メッセージ・ファイルがインストールされている場合、SQL文の構文エラーなどのデータベース側で生成されたエラー・メッセージは、選択した言語となります。
Instant Client Lightは、次のクライアント・キャラクタ・セットをサポートします。
シングルバイト
US7ASCII
WE8DEC
WE8MSWIN1252
WE8ISO8859P1
Unicode
UTF8
AL16UTF16
AL32UTF8
Instant Client Lightは、次のいずれかのデータベース・キャラクタ・セットを使用するデータベースに接続できます。
US7ASCII
WE8DEC
WE8MSWIN1252
WE8ISO8859P1
WE8EBCDIC37C
WE8EBCDIC1047
UTF8
AL32UTF8
Instant Client Lightは、前述のリストにないキャラクタ・セットがクライアントまたはデータベースのキャラクタ・セットとして使用された場合に、エラーを戻します。
Instant Client Lightは、OCI_UTF16
モードで作成されたOCI環境ハンドルを使用しても動作できます。
OCIアプリケーションは、デフォルトで、OCIデータ共有ライブラリlibociei.so
(WindowsではOraociei11.dll
)をLD_LIBRARY_PATH
(WindowsではPATH
)から検索し、アプリケーションがInstant Clientモードで動作するかどうかを判断します。このライブラリが見つからない場合、OCIはInstant Client Lightデータ共有ライブラリlibociicus.so
(WindowsではOraociicus11.dll
)のロードを試みます。Instant Client Lightのライブラリが見つかった場合、アプリケーションはInstant Client Lightモードで動作します。その他の場合は、ORACLE_HOME
ベースの完全インストールが想定されます。
表1-4 OCI Instant Client共有ライブラリ
LinuxおよびUNIX | LinuxおよびUNIXでの説明 | Windows | Windowsでの説明 |
---|---|---|---|
|
クライアント・コード・ライブラリ |
|
アプリケーションがリンクする転送機能 |
|
OCI Instant Clientデータの共有ライブラリ |
|
データとコード |
|
セキュリティ・ライブラリ |
|
セキュリティ・ライブラリ |
|
記号表 |
Instant Client Lightのインストールは、次のいずれかの方法で行うことができます。
OTNから
Instant ClientのURLにアクセスします。
http://www.oracle.com/technology/software/tech/oci/instantclient/
Instant Client Lightの場合、basic.zip
パッケージをダウンロードして展開するかわりに、basiclite.zip
パッケージをダウンロードして解凍します。Instant Client Lightライブラリの解凍先となるinstantclient_11_1
ディレクトリは、解凍前は空である必要があります。
インストールされたクライアント(管理者)から
ORACLE_HOME/instantclient
ディレクトリからlibociei.so
(WindowsではOraociei11.dll
)をコピーするかわりに、ORACLE_HOME/instantclient/light
サブディレクトリからlibociicus.so
(WindowsではOraociicus11.dll
)をコピーします。つまり、LD_LIBRARY_PATH
(WindowsではPATH
)のInstant Clientディレクトリに、サイズの大きいOCI Instant Clientデータ共有ライブラリlibociei.so
(WindowsではOraociei11.dll
)のかわりに、Instant Client Lightデータ共有ライブラリlibociicus.so
(WindowsではOraociicus11.dll
)を格納します。
Oracle Universal Installerから
Oracle Universal Installer(OUI)でInstant Clientオプションを選択した場合、libociei.so
(WindowsではOraociei11.dll
)は、LD_LIBRARY_PATH
(WidowsではPATH
)に記載されている、その環境のベース・ディレクトリにインストールされます。これは、Instant Client Lightがデフォルトで有効化されないようにするためです。Instant Light Clientデータ共有ライブラリlibociicus.so
(WindowsではOraociicus11.dll
)は、ベース・ディレクトリのlight
サブディレクトリにインストールされます。したがって、Instant Client Lightモードを使用するには、OCIデータ共有ライブラリlibociei.so
(WindowsではOraociei11.dll
)を削除するか名前を変更し、Instant Client Lightのライブラリをその環境のlight
サブディレクトリからベース・ディレクトリにコピーする必要があります。
たとえば、OUIでInstant ClientをLD_LIBRARY_PATH
(WindowsではPATH
)のmy_oraic_11_1
ディレクトリにインストールした場合、Instant Client Lightモードを使用するには、次を実行する必要があります。
cd my_oraic_11_1 rm libociei.so mv light/libociicus.so .
注意: すべてのInstant Clientファイルは、空のディレクトリにコピーし、インストールします。これは、環境に互換性のないバイナリ・ファイルが存在しないようにするためです。 |
SDKは、Instant ClientのWebページからダウンロードできます。
http://www.oracle.com/technology/tech/oci/instantclient/
Instant Client SDKパッケージには、CおよびC++のヘッダー・ファイルと、Instant Client環境でOCIおよびOCCIアプリケーションを開発するためのMakefileが含まれています。開発したアプリケーションは、あらゆるクライアント環境にデプロイできます。
SDKには、CおよびC++のデモ・プログラムが含まれています。
Windowsの場合、OCIまたはOCCIアプリケーションをリンクするために必要なライブラリも含まれています。デモをビルドするための、Make.bat
が提供されています。
UNIXまたはLinuxの場合、デモをビルドするため、Makefile demo.mk
が提供されています。アプリケーションをリンクする前に、instantclient_11_1
ディレクトリがLD_LIBRARY_PATH
に記載されている必要があります。 OCIおよびOCCIプログラムでは、libclntsh.so
およびlibocci.so
シンボリック・リンクがinstantclient_11_1
ディレクトリに存在する必要があります。 demo.mk
は、リンク・ステップの前にこれらを作成します。これらのシンボリック・リンクは、シェルでも作成できます。
cd instantclient_11_1 ln -s libclntsh.so.11.1 libclntsh.so ln -s libocci.so.11.1 libocci.so
また、SDKには、アプリケーション・ヘッダー・ファイルを生成するための、Object Type Translator(OTT)ユーティリティとそのクラスが含まれます。