この章は、次の項目で構成されています。
Oracle Call Interface (OCI)はApplication Program Interface (API)の1つで、これを使用すると、関数コールを使用してOracle Databaseにアクセスし、SQL文の実行のすべてのフェーズを制御するアプリケーションを作成できます。OCIでは、C言語とC++言語のデータ型、コール規則、構文およびセマンティックをサポートします。
OCIは次の機能を備えています。
システム・メモリーおよびネットワーク接続の効率的な使用によるパフォーマンスと拡張性の向上
2層クライアント/サーバーまたは複数層環境での動的セッションおよびトランザクション管理に適した一貫性のあるインタフェース
N層認証
Oracle Databaseオブジェクトを使用したアプリケーション開発の包括的サポート
外部データベースへの接続
ハードウェアへの追加投資をすることなく、ユーザー数および要求数の増加をサポートするアプリケーション
OCIでは、Cプログラミング言語を使用してOracle Database内のデータおよびスキーマを操作できます。また、標準的なデータベース・アクセスと検索機能のライブラリが動的ランタイム・ライブラリ(OCIライブラリ)の形で用意されており、実行時にアプリケーションにリンクできます。
OCIを使用して、Oracle TimesTen In-Memory DatabaseおよびOracle In-Memory Database Cacheにアクセスできます。『Oracle TimesTen In-Memory Database C開発者ガイド』を参照してください
OCIは多くの新機能を備えており、主に次のように分類できます。
カプセル化された、または不透明なインタフェース(実装の詳細は見えない)
ユーザー認証およびパスワード管理の簡易化
アプリケーションのパフォーマンスおよび拡張性を向上させる拡張機能
トランザクション管理に適した一貫性のあるインタフェース
クライアント側からのOracleオブジェクトに対するアクセスをサポートするOCI拡張機能
関連項目:
Oracle Technology Network URLのOCIページ: http://www.oracle.com/technetwork/database/features/oci/
『Oracle C++ Call Interfaceプログラマーズ・ガイド』
Oracle Databaseに接続する場合、OCIには次のような他の方法よりも大きな利点があります。
アプリケーション設計のあらゆる側面におけるきめ細かい制御
プログラム実行に対する高度な制御
使い慣れた第三世代言語プログラミング手法およびブラウザやデバッガなどのアプリケーション開発ツールの使用
スケーラブルなアプリケーション作成を可能にする接続プーリング、セッション・プーリングおよび文キャッシュ
動的SQLのサポート
様々なオペレーティング・システムに対応したOracleプログラム・インタフェースの可用性
コールバックを使用した動的バインドおよび定義
サーバー・メタデータのレイヤーを公開する記述機能
登録されたクライアント・アプリケーションへの非同期イベント通知
配列の挿入、更新、削除を行うための高度な配列データ操作言語(DML)機能
コミット要求の実行への関連付けによるラウンドトリップ回数の削減
透過的プリフェッチ・バッファを使用した問合せの最適化によるラウンドトリップ回数の削減
OCIハンドルに対する相互排他ロック(mutex)を不要にするスレッド・セーフティ
OCIプログラムは非データベース・アプリケーションと同様の方法でコンパイルおよびリンクできます。処理前のステップやプリコンパイル・ステップを別途行う必要はありません。
Oracle Databaseでは、一般に普及しているほとんどのコンパイラをサポートしています。OCIプログラムのリンクの詳細は、システムによって異なります。一部のオペレーティング・システムでは、OCIプログラムを正常にリンクさせるために、OCIライブラリに加えて他のライブラリの組込みが必要になる場合があります。オペレーティング・システムでのOCIアプリケーションのコンパイルとリンクの詳細は、使用システムに関するOracle Databaseマニュアルとインストレーション・ガイドを参照してください。
OCIの代替方法について説明します。
Oracle Call Interface (OCI)使用の代替方法には、次のものがあります。
Oracle Database Programming Interface for C (ODPI-C)
Oracle C++ Call Interface(OCCI)
Oracle Pro*C/C++ プリコンパイラ
Oracle Database Programming Interface for C (ODPI-C)
ODPI-Cは、Oracle Databaseのドライバおよびユーザー・アプリケーションに対する共通のOracle Call Interface (OCI)機能の使用を簡略化する、Cコードのオープン・ソース・ライブラリです。ODPI-Cは、OCIの上位に位置し、Oracleクライアント・ライブラリを必要とします。ODPI-Cの場合:
OCI機能を必要としない特殊なケースでは、ドライバの作成者向けに使用が簡略化されています。
コードが大幅に少なくなり、ドライバを早く実装できます。Oracle機能がユーザーに対して迅速かつ一貫した方法で公開されます。
変数のバインドおよびフェッチに関するメモリー管理が簡略化されます。
バインドおよび(フェッチの)定義をネイティブのCデータ型に自動的に変換するため、追加のコールは必要ありません。これは、特に数値および日付に役立ちます。LONGおよびLOB列を文字列およびバッファとして取得する機能にもメリットがあります。
リソース・ハンドルを検証する、より安全なAPIが提供されます。キャストは必要ありません。参照のカウント・メカニズムにより、アプリケーションによる使用中のOCIリソースの破壊を抑えることにより、復元力が高まります。
接続およびリソース管理を簡略化するAPIが提供されます。たとえば、セッション・プールのpingが自動的に実行され、高可用性が向上します。
属性の操作に対して複数のgetterおよびsetterモデルを使用する、OCIによる別のプログラミングの操作性が提供されます。
共有ライブラリとしてODPI-Cを構築するサンプルMakefileが提供されます。また、ODPI-Cソース・コードをプロジェクトに組み込み、OCIアプリケーションを構築するように構築できます。
関連項目:
製品の販売: ODPI-Cでサポートされる機能のリスト、およびそのホーム・ページ、githubでのコードの場所、ドキュメントなどの参照情報のリストについては、Oracle Database Programming Interface for C (ODPI-C)を参照してください
Oracle C++ Call Interface(OCCI)
Oracle C++ Call Interface (OCCI)は、C++で記述されたアプリケーションが1台以上のOracle Databaseサーバーと対話するためのアプリケーション・プログラミング・インタフェース(API)です。OCCIによって、SQL文の処理やオブジェクトの操作を含めて、Oracle Databaseサーバーで可能なデータベース操作全体をプログラムから利用できるようになります。
関連項目:
『Oracle C++ Call Interfaceプログラマーズ・ガイド』のOCCIの概要に関する項
Oracle Pro*C/C++ プリコンパイラ
Oracle Pro*C/C++プロコンパイラとは、ソース・プログラムの上位レベルにSQL文を埋め込むことができるようにするプログラミング・ツールです。このプリコンパイラでは、ソース・プログラムを入力として受け入れ、埋込みSQL文を標準のOracleランタイム・ライブラリ・コールに変換し、通常の方法でコンパイル、リンクおよび実行が可能な変換されたソース・プログラムを生成します。
関連項目:
『Pro*C/C++プログラマーズ・ガイド』のOracle Pro*C/C++プリコンパイラの概要に関する項
OCIは次の機能を備えています。
多数のユーザーを安全にサポートできるスケーラブルなマルチスレッド・アプリケーションを設計するためのAPI
データベース・アクセスの管理、SQL文の処理およびOracle Databaseから取り出したオブジェクトの操作を行うためのSQLアクセス関数
Oracle型のデータ属性を操作するためのデータ型マッピングおよび操作関数
SQL文を使用せずにデータベースにデータを直接ロードするためのデータ・ロード関数
PL/SQLからC言語のコールバックを書き込むための外部プロシージャ関数
OCIを使用すると、SQLの非手続き型データ・アクセス機能と、CやC++言語の手続き型機能をあわせ持つ複数層アーキテクチャ上で、スケーラブルなマルチスレッド・アプリケーションを開発できます。
非手続き型言語のプログラムでは、操作対象となる一連のデータが指定されますが、実行する操作の種類や操作の方法は指定されません。SQLは非手続き型であるため、データベース・トランザクションの実行用として簡単に覚えやすく使用しやすい言語です。また、先進のリレーショナル・データベース・システムおよびオブジェクト・リレーショナル・データベース・システムのデータに対するアクセスや操作に使用する標準言語となっています。
手続き型言語のプログラムでは、大部分の文の実行は、前または後続の文、およびループや条件ブランチなどSQLでは利用できない制御構造に依存しています。手続き型という性質上、このような言語はSQLよりも複雑ですが、柔軟性に富み、非常に強力です。
OCIプログラムでは、非手続き型言語と手続き型言語の要素が組み合されているため、構造化プログラミング環境でOracle Databaseに容易に接続できます。
OCIでは、Oracle Databaseを通じて使用可能なSQLのデータ定義、データ操作、問合せおよびトランザクション制御の機能をすべてサポートしています。たとえば、OCIプログラムでは、Oracle Databaseに対する問合せを実行できます。問合せ文では、次の例のように、入力(バインド)変数を使用して、データベースにデータを渡すようにプログラムに対して指示できます。
SELECT name FROM employees WHERE empno = :empnumber;
前述のSQL文の:empnumber
は、アプリケーションが指定する値に対するプレースホルダです。
また、Oracleが開発したSQLの手続き型拡張要素であるPL/SQLも利用できます。PL/SQLにより、SQLのみで作成されたアプリケーションよりも、さらに強力で柔軟性のあるアプリケーションを開発できます。OCIは、データベース内のオブジェクトに対するアクセスおよび操作のための機能も提供します。
OCIには、オブジェクト型 とオブジェクトを処理する機能があります。
オブジェクト型は、ユーザー定義のデータ構造体で、現実社会の実体を抽象的に表します。たとえば、データベースにperson
(個人)というオブジェクトの定義が含まれているとします。このオブジェクトは、個人を識別するための特徴を表した属性—first_name
、last_name
およびage
を持つことができます。
オブジェクト型の定義は、オブジェクト型のインスタンスを表すオブジェクトの作成の基礎となり、オブジェクト型を構造的な定義として使用することで、person
オブジェクトを属性値 'John'、'Bonivento'および'30'で作成できます。オブジェクト型には、メソッド、つまりそのオブジェクト型の動作を表すプログラム関数を含めることもできます。
OCIには、Oracle Database内のオブジェクト処理用にOCIの機能を拡張した関数が組み込まれています。これらの機能には次のものが含まれます。
オブジェクト・データとスキーマ情報を操作するSQL文の実行
SQL文の入力変数としてオブジェクト参照およびオブジェクトのインスタンスを渡す機能
SQL文の出力を受け取る変数として、オブジェクト参照およびオブジェクトのインスタンスの宣言
データベースからオブジェクト参照およびオブジェクトのインスタンスのフェッチ
オブジェクトのインスタンスと参照を戻すSQL文のプロパティの記述
オブジェクト・パラメータまたは結果を指定したPL/SQLプロシージャまたはファンクションの記述
オブジェクトとリレーショナル機能を同期化するための、コミット・コールとロールバック・コールの拡張
関連項目:
SQL文によってアクセスされた後、オブジェクトの操作をサポートするために提供されるその他のOCIコールの詳細は、「カプセル化されたインタフェース」を参照してください
『Oracle Database概要』
Oracle Databaseオブジェクト・リレーショナル開発者ガイド
OCIアプリケーションの主なタスクの1つは、SQL文を処理することです。
SQL文の種類が異なると、プログラムでは異なる処理ステップが必要になります。OCIアプリケーションをコーディングする際には、そのことを考慮に入れることが重要です。Oracle Databaseでは、次の種類の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 Database内のオブジェクトを操作することもできます。
CREATE TYPE person_t AS OBJECT ( name VARCHAR2(30), ssn VARCHAR2(12), address VARCHAR2(50)); CREATE TABLE person_tab OF person_t;
OCIアプリケーションでは、トランザクション制御文、セッション制御文およびシステム制御文を、それらがDML文であるかのように処理します。
関連項目:
これらの種類の文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください
データ操作言語(DML)文は、データベース表にあるデータを変更できます。
たとえば、DML文を使用して次の処理を実行します。
表に新しい行を挿入します。
既存の行の列値を更新します。
表から行を削除します。
データベース内の表をロックします。
SQL文の実行計画を説明します。
入力(バインド)変数を使用して、データベースにデータを渡すようにアプリケーションに対して指示します。
関連項目:
入力バインド変数の詳細は、「OCIのプレースホルダのバインドについて」を参照してください
また、DML文ではOracle Database内のオブジェクトを操作でき、次の例では、person_t
型のインスタンスがオブジェクト表person_tab
に挿入されています。
INSERT INTO person_tab VALUES (person_t('Steve May','987-65-4320','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
の値を受け取るために出力変数を定義する必要があります。
関連項目:
入力バインド変数の詳細は、「OCIでのバインドの概要」を参照してください
出力変数の定義の詳細は、「OCIでの定義の概要」を参照してください
OCIプログラムでのSQL文の処理方法の詳細は、「OCIでのSQL文の使用」を参照してください
PL/SQLは、Oracleが開発したSQL言語の手続き型拡張機能です。
PL/SQLは、単純な問合せやSQLデータ操作言語文よりも複雑なタスクを処理します。PL/SQLを使用すると、いくつかの構文を単一のブロックにグループ化し、1つの単位として実行できます。これらの単位には次の部分が含まれます。
1つまたは複数のSQL文
変数宣言
代入文
プロシージャ型制御文(IF...THEN...ELSE文とループ)
例外処理
OCIプログラムでPL/SQLブロックを使用すると、次の処理を実行できます。
Oracle Databaseストアド・プロシージャおよびストアド・ファンクションのコール
手続き型制御文を複数のSQL文と結合し、1つの単位として実行
レコード、表、カーソルFORループ、例外処理などの特殊なPL/SQL機能へのアクセス
カーソル変数の使用
暗黙的な結果セットを返す既存のストアド・プロシージャの設計を再利用できる、暗黙的な結果セットの機能の活用
Oracle Database内のオブジェクトへのアクセスおよび操作
次のPL/SQL例では、特定の従業員番号をキーにして、従業員表から値を取り出すSQL文が発行されます。この例は、PL/SQL文でのプレースホルダの使用方法も示しています。
BEGIN SELECT ename, sal, comm INTO :emp_name, :salary, :commission FROM emp WHERE empno = :emp_number; END;
この文のプレースホルダは、PL/SQL変数ではないことに注意してください。これらは、文の処理時に、データベースに渡される入力値を示しています。これらのプレースホルダは、プログラム内でC言語変数にバインドする必要があります。
関連項目:
PL/SQLブロックのコーディングの詳細は、『Oracle Database PL/SQL言語リファレンス』 を参照してください
PL/SQLでのプレースホルダの使用方法の詳細は、「PL/SQLのプレースホルダのバインドについて」を参照してください
OCIは、アプリケーションが実行時にデータベースに渡すテキスト文字列としてSQL文を処理します。
Oracleプリコンパイラ(Pro*C/C++、Pro*COBOL、Pro*FORTRAN)を使用することによって、SQL文をアプリケーション・コードに直接埋め込むことができます。その後、実行可能なアプリケーションを生成するために別個のプリコンパイル・ステップが必要です。
OCIコールと埋込みSQLはプリコンパイラ・プログラムでは混在できます。
関連項目:
『Pro*C/C++プログラマーズ・ガイド』
このマニュアルでは、SQL文の様々な部分を参照するために特殊な用語を使用しています。
たとえば、次のSQL文があるとします。
SELECT customer, address FROM customers WHERE bus_type = 'SOFTWARE' AND sales_volume = :sales;
ここには次の要素があります。
SQLコマンド - SELECT
2つの選択リスト項目 - customer
およびaddress
FROM
句内の表名 - customers
WHERE
句内の2つの列名 - bus_type
およびsales_volume
WHERE
句内のリテラル入力値 - 'SOFTWARE
'
WHERE
句内の入力変数のプレースホルダ - :sales
OCIアプリケーションを開発する際は、プログラムの入出力変数のアドレス(位置)をOracle Databaseに指定しているルーチンをコールします。このマニュアルでは、データ入力用のプレースホルダ変数のアドレスを指定することをバインド操作と呼びます。また、選択リスト項目を受け取るための変数のアドレスを指定することを定義操作と呼びます。
PL/SQLでは、入力の指定も出力の指定もバインド操作と呼びます。
関連項目:
OCIコールで使用されるすべてのデータ構造は、ハンドルと呼ばれる不透明なインタフェースの形にカプセル化されます。ハンドルとは、OCIライブラリによって割り当てられる記憶領域を指す不透明なポインタで、SQL文またはPL/SQL文のコンテキスト情報、接続情報、エラー情報またはバインド情報を格納します。クライアントでは、特定の種類のハンドルを割り当て、正しく定義されたインタフェースを通じて1つ以上のハンドルを移入し、それらのハンドルを使用してサーバーに要求を送信します。その結果、アプリケーションは、アクセッサ関数を使用してそのハンドルに含まれている特定の情報にアクセスできます。
OCIライブラリでは、ハンドルの階層が管理されます。これらのハンドルを使用してOCIインタフェースをカプセル化することには、アプリケーション開発者にとって次のような利点があります。
保持する必要があるサーバー側の状態情報が少なくなり、サーバー側のメモリー使用量を削減できます。
グローバル変数を使用する必要がなくなること、エラー・レポートを作成しやすくなること、OCI変数のアクセスおよび使用方法に一貫性を保てることにより、生産性が向上します。
アプリケーションに影響を与えずに基礎となる構造を変更できます。
OCIでは、アプリケーション開発者が、次のような簡易化されたユーザー認証およびパスワード管理を実行できます。
単一のOCIアプリケーションで、複数のユーザーを認証およびメンテナンスできます。
OCIアプリケーションで、ユーザーのパスワードを更新でき、認証の処理でパスワード期限切れのメッセージが戻された場合に特に役立ちます。
OCIでは、次の2種類のログイン・セッションをサポートします。
シングル・ユーザーがログイン名とパスワードを使用してデータベースに接続するセッションのための、簡易ログイン関数。
ログイン・セッション(ユーザーがOracle Databaseにログインするときに作成されるセッション)をユーザー・セッション(ユーザーが作成したその他すべてのセッション)から分離することにより、単一のOCIアプリケーションで複数のセッションの認証とメンテナンスを行うメカニズム。
SYSDBA
、SYSOPER
などの優先接続もサポートされています。
OCIには、アプリケーションのパフォーマンスおよび拡張性を改善する、いくつかの拡張機能があります。クライアントとサーバー間のラウンドトリップ回数を減らすことにより、アプリケーションのパフォーマンスが改善され、さらにサーバー側で保持する必要がある状態情報の量を減らすことにより拡張性も向上しています。これらの機能には、次のものがあります。
繰返し使用される実行可能文をキャッシュすることによってパフォーマンスが向上する、文キャッシュ
データベース・サーバーへのラウンドトリップ数を制限するクライアント結果キャッシュ
記述のラウンドトリップをなくし、ラウンドトリップ回数およびメモリー使用量を削減する、SELECT
文結果セットの暗黙的なプリフェッチ
オープン・カーソルとクローズ・カーソルのラウンドトリップの排除
マルチスレッド環境のサポート
接続上のセッション多重化
標準の2層クライアント/サーバー構成、サーバー/サーバー・トランザクション調整、3層トランザクション処理(TP)モニター構成など、様々な構成に対する一貫したサポート
XAインタフェースのTM_JOIN操作のサポートを含む、ローカル・トランザクションおよびグローバル・トランザクションに対する一貫したサポート
接続中のユーザー接続、処理およびセッションを集結する機能を提供し、グローバル・トランザクションのブランチごとに個別のセッションを作成する必要性をなくしたことによる、拡張性の向上
アプリケーションによる複数のユーザーの認証、および複数のユーザーのためのトランザクションの開始
OCIは、Oracle Databaseのオブジェクト機能を使用するプログラマに、包括的なアプリケーション・プログラミング・インタフェースを提供します。
その機能は、次の主要なカテゴリに分類できます。
オブジェクトへのアクセスおよび操作のためのアソシエイティブ・インタフェースおよびナビゲーショナル・インタフェース
オブジェクト型に関する情報にアクセスし、Oracle型のデータ属性を制御するための型管理(マッピングおよび操作関数)
Oracle Database内部スキーマ情報をクライアント側の言語バインド変数にマッピングするObject Type Translator(OTT)ユーティリティ
オブジェクト・キャッシュは、オブジェクトの参照とメモリー管理をサポートするクライアント側のメモリー・バッファです。オブジェクト・キャッシュは、OCIアプリケーションがサーバーからクライアント側にフェッチしたオブジェクト・インスタンスを格納し、追跡します。オブジェクト・キャッシュは、OCI環境を初期化するときに作成されます。同じサーバーに対して複数のアプリケーションを実行する際には、それぞれに専用のオブジェクト・キャッシュがあります。オブジェクト・キャッシュは、メモリーに現在あるオブジェクトの追跡、オブジェクトへの参照のメンテナンス、自動オブジェクト・スワッピングの管理、オブジェクトのメタ属性または型情報の追跡を行います。また、オブジェクト・キャッシュには、OCIアプリケーションに対する次の機能が備えられています。
オブジェクトのフェッチおよび操作に必要なクライアント/サーバー間のラウンドトリップ回数の削減によるアプリケーションのパフォーマンスの改善
クライアント側のキャッシュからのオブジェクト・スワッピングのサポートによる拡張性の向上
オブジェクト・レベルのロックのサポートによる同時実行性の向上
OCIを使用したアプリケーションでは、次のような様々な種類のインタフェースを介して、Oracle Database内のオブジェクトにアクセスできます。
SQLのSELECT
文、INSERT
文およびUPDATE
文の使用
対応するスマート・ポインタまたはREF
を横断することによりクライアント側のキャッシュ内のオブジェクトにアクセスする、Cスタイルのポインタ追跡スキームの使用
OCIは、SQLのSELECT
、INSERT
およびUPDATE
文を使用したオブジェクトの操作をサポートするための一連の拡張子付き関数を提供します。Oracle Databaseオブジェクトにアクセスする場合、これらのSQL文では、リレーショナル表にアクセスするような一貫した一連のステップが使用されます。また、OCIには、オブジェクトにアクセスするのに必要な次の関数セットも用意されています。
オブジェクト型のインスタンスと参照をSQL文の入出力変数としてバインドおよび定義します。
オブジェクト型のインスタンスと参照を含むSQL文を実行します。
オブジェクト型のインスタンスと参照をフェッチします。
Oracleオブジェクト型の選択リスト項目を記述します。
OCIでは、対応するスマート・ポインタまたはREF
を横断することにより、クライアント側のキャッシュ内にフェッチされているオブジェクトに、Cスタイルのポインタ追跡スキームを使用してアクセスする一連の関数も提供しています。このナビゲーショナル・インタフェースでは、関数が次の目的で使用されます。
参照可能な永続オブジェクト(つまり、クライアント側のキャッシュ内のオブジェクトIDを持つ永続オブジェクト)のコピーをスマート・ポインタまたはREF
を確保することによりインスタンス化します。
あるオブジェクトから別のオブジェクトを指し示すREF
を横断することにより、お互いに接続されているオブジェクトの順序を横断します。
オブジェクト属性の値を動的に取得し、設定します。
OCIでは、Oracle Databaseオブジェクトのクライアント側での使用方法を管理するオブジェクト用の関数を提供します。これらの関数は、次の目的で使用されます。
セッションの初期化、データベース・サーバーへのログイン、接続の登録などのオブジェクト機能にアクセスするための、Oracle Databaseサーバーへの接続
クライアント側のオブジェクト・キャッシュの設定およびそのパラメータのチューニング
エラーおよび警告メッセージの取得
データベース内のオブジェクトにアクセスするトランザクションの制御
SQLによるオブジェクトへの結合アクセス
パラメータまたは結果がOracle型であるPL/SQLプロシージャまたはファンクションの記述
OCIでは、Oracle Databaseオブジェクトを操作するための2つの関数セットを提供します。
型マッピング関数を使用すると、アプリケーションで、Oracle内部データ型としてサーバーで表されているOracleスキーマの属性を、対応するホスト言語型にマップできます。
型操作関数を使用すると、ホスト言語のアプリケーションで、Oracleスキーマの個別の属性を操作できます。属性の値を設定および取得したりサーバーにフラッシュできます。
また、OCIDescribeAny()
関数を使用すると、データベース内に格納されたオブジェクトの情報を取得できます。
Object Type Translator (OTT)ユーティリティは、Oracleオブジェクト型に関するスキーマ情報を、ホスト言語変数のクライアント側言語バインディングに翻訳します(構造など)。OTTは、Oracleスキーマ・オブジェクトに関するメタデータ情報を含むintype
ファイルを入力として使用します。また、outtype
ファイル、ヘッダー・ファイルおよび実装ファイルを生成します。これらは、オブジェクト・スキーマに対して実行されるC言語アプリケーションに含まれている必要があります。OCIアプリケーションとPro*C/C++プリコンパイラ・アプリケーションの両方に、OTTが生成したコードが含まれている場合があります。次の理由により、OTTは非常に便利です。
アプリケーション開発者の生産性が向上します。OTTを使用すると、アプリケーション開発者はスキーマ・オブジェクトに対応するホスト言語変数をコーディングする必要がなくなります。
SQLを、選択したデータ定義言語としてメンテナンスします。OTTでは、SQLを使用して作成したOracleスキーマ・オブジェクトをホスト言語変数に自動的にマップできるため、SQLがデータ定義言語として使用しやすくなります。その結果、Oracle Databaseによって、データの一貫したモデルをサポートできます。
オブジェクト型のスキーマ展開を容易にします。OTTでは、スキーマが変更されたときにインクルードされたヘッダー・ファイルを再生成できるため、Oracleアプリケーションでスキーマ展開をサポートできます。
通常、OTTは、コマンドラインからintype
ファイル、outtype
ファイルおよび特定のデータベース接続を指定することにより起動されます。Oracle Databaseでは、OTTにより、OCIプログラムとPro*C/C++プリコンパイラ・プログラムのどちらでも使用できるC構造体のみを生成できます。
OCIでは、Oracle Streams Advanced Queuing (Streams AQ)機能へのインタフェースを提供します。
Streams AQは、Oracle Databaseと統合されたメッセージ・キューイングです。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
ディレクトリがすでにこのMakefileに記載されているためです。
Windowsの場合、パスはORACLE_BASE\ORACLE_HOME
¥oci¥include
です。
関連項目:
WindowsおよびXAアプリケーションの詳細は、「Oracle XAライブラリ」を参照してください
Oracle XAによるアプリケーションの開発の詳細は、『Oracle Database開発ガイド』を参照してください
次の各項では、異なるリリースのOCIクライアントとサーバー間での互換性の問題、OCIライブラリ・ルーチンの変更点およびOCIリリース7.xからこのリリースのOCIへのアプリケーションのアップグレードについて説明します。
新規リリースで再リンクする場合の規則について説明します。
次に、新規リリースで再リンクする場合の規則を示します。
静的にリンクされたOCIアプリケーションの場合:
静的にリンクされたOCIアプリケーションが、メジャー・リリース番号とマイナー・リリース番号の両方について再リンクする必要があるのは、Oracle Databaseのクライアント側のライブラリ・コードが、アップグレードされたOracleホーム内のエラー・メッセージと互換性がないためです。たとえば、エラー・メッセージが追加パラメータで更新された場合、そのエラー・メッセージは、静的にリンクされたコードとは互換性がなくなります。
動的にリンクされたOCIアプリケーションの場合:
Oracle Database 10g以降のリリースの動的にリンクされたOCIアプリケーションは、再リンクする必要はありません。つまり、Oracle Databaseのクライアント側の動的ライブラリには、以前のバージョンのライブラリに対して上位互換性があります。Oracle Universal Installerにより、現行バージョンに解決される以前のバージョンのライブラリ用にシンボリック・リンクが作成されます。したがって、以前のバージョンのOracle Databaseのクライアント側動的ライブラリと動的にリンクされたアプリケーションは、現行バージョンのOracle Databaseのクライアント側ライブラリで動作するために再リンクする必要はありません。
注意:
アプリケーションがランタイム・ライブラリ検索パス(Linuxの-rpath
など)とリンクされている場合、アプリケーションはリンクされているOracle Databaseのクライアント側ライブラリのバージョンでまだ動作する可能性があります。現行バージョンのOracle Databaseのクライアント側ライブラリで動作するためには、再リンクする必要があります。
関連項目:
互換性およびアップグレードの詳細は、『Oracle Databaseアップグレード・ガイド』 を参照してください
現在サポートされているサーバー・バージョンは、My Oracle Supportのドキュメント207303.1に記載されています
.OCIでは、OCIリリース7以降の多くの機能が大幅に改善されました。OCIリリース7.3 APIを使用していたアプリケーションは、現行リリースのOracle Databaseに対して通常どおり動作します。これらのアプリケーションは、現行のクライアント・ライブラリにリンクする必要があります。ただし、OCIリリース7.3 APIは非推奨となり、このオプションはOracleの今後のリリースでは使用できなくなりました。
OCIリリース7.xおよびこのリリースのOCIのコールは、同じ文の実行で混在させないかぎり、同一アプリケーションおよび同一トランザクション内で使用できます。このため、既存のOCIバージョン7のアプリケーションを移行する場合は、次の2つの方法があります。
現行のOCIクライアントにアップグレードしますが、アプリケーションは修正しません。Oracleリリース7 OCIクライアントから現行リリースのOCIクライアントにアップグレードする場合は、新規バージョンのOCIライブラリにリンクするだけでよく、アプリケーションを再コンパイルする必要はありません。再リンクしたOracle Databaseリリース7のOCIアプリケーションは、現行Oracle Databaseに対して通常どおり動作します。このオプションは非推奨となり、Oracleの今後のリリースでは使用できなくなりました。
現行のOCIクライアントにアップグレードして、アプリケーションを修正します。ただし、新しいOCIで提供されるパフォーマンスと拡張性の利点を活用するには、新しいOCIプログラミング・パラダイムを使用できるように既存のアプリケーションを修正し、そのアプリケーションを再作成して現行のOCIライブラリに再リンクし、現行リリースのOracle Databaseに対して実行する必要があります。
現行リリースのOracle Databaseのオブジェクト機能を使用する必要がある場合は、クライアントを現行リリースのOCIにアップグレードする必要があります。
注意:
デフォルトでは、バージョン7のAPIを使用するアプリケーションをOracle Database 12cに接続できなくなります。このアプリケーションをOracle Database 12cに接続するには、sqlnet.allowed_logon_version
を8
に設定する必要があります。
OCIリリース8.0では、リリース7.3で利用できなかった新しい関数セットを導入しました。パフォーマンスを向上し、機能性を高めるために、新しいアプリケーションで新しいコールを使用することをお薦めします。Oracleの今後のリリースでは、リリース7.3のAPIはサポートされません。
表1-1は、リリース7.xのOCIコールおよび以降のリリースでの等価コールのリストです。OCIコールの詳細は、このマニュアルの関数の説明を参照してください。リリース7.xコールの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド リリース7.3』を参照してください。
注意:
多くの場合、新規または現行のOCIルーチンはリリース7.xのルーチンに直接マッピングを行わないため、関数コールとパラメータ・リストを単純に別のものに置き換えることがほとんどできない場合があります。この場合、新規または現行のコールを作成する前後に、追加のプログラム・ロジックが必要になります。詳細は、このマニュアルの残りの章、特に「OCIプログラミングの基本」を参照してください。
表1-1 使用されなくなったOCI関数
7.xのOCIルーチン | 以降のリリースでの等価または類似のOCIルーチン |
---|---|
|
|
|
|
|
なし |
|
注意: リリース8.x以降では、カーソルは使用されていません。 |
|
|
|
|
|
|
|
注意: スキーマ・オブジェクトはOCIDescribeAny()で記述されます。通常、記述は、リリース7.xで使用されているように、SQL文の実行後にOCIAttrGet()を文ハンドルでコールすることにより行われます。 |
|
|
|
|
|
|
|
|
|
|
|
なし |
|
|
|
|
|
|
|
注意: 非ブロック化モードは、 |
|
注意: リリース8.x以上では、カーソルは使用されていません。 |
|
なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
注意: 前述のodescr()を参照してください。 |
|
|
|
|
|
|
|
注意: 前述の |
|
注意: 前述の |
注意:
size_t
を使用してOCI 7コールに渡されるホスト領域(hda
)を定義するアプリケーションは、一部のプラットフォームで不揃いのデータのためにクラッシュする場合があります。その場合は、size_t
のかわりにHda_Def
を使用する必要があります。アプリケーションを修正できない場合は、SPARCプラットフォームでコンパイラとリンカー・フラグのmisalign
を使用できます。詳細は、デモおよびhttp://docs.oracle.com/cd/E19205-01/819-5267/bkauj/index.html
のドキュメントを参照してください。
OCIの以前のバージョンで使用可能だったOCIルーチンの一部は、現行リリースではサポートされません。それらは表1-2に記載されています。
表1-2 サポートされないOCI関数
OCIルーチン | 以降のリリースでの等価または類似のOCIルーチン |
---|---|
|
|
|
|
|
|
|
注意: 表1-1の |
|
|
|
注意: 表1-1の |
Instant Client機能により、クライアント・マシン上でOracleホームの必要がなくなることで、OCI、OCCI、ODBCおよびJDBC OCIに基づくカスタマ・アプリケーションのデプロイが簡略化されます。Instant Clientモードで実行されるOCIアプリケーションの記憶領域の所要量は、クライアント側の完全インストールで実行される同じアプリケーションに比べて、大幅に少なくなります。Instant Client共有ライブラリは、クライアント側の完全インストールのディスク領域のうち、4分の1のみを使用します。
READMEは、Instant Clientインストールに付属しています。このファイルには、Instant Clientが生成されたバージョン、日時およびオペレーティング・システムが記載されています。
表1-3に、OCIアプリケーションのデプロイに必要なOracle Databaseのクライアント側ファイルを示します。
表1-3 OCI Instant Client共有ライブラリ
LinuxおよびUNIX | LinuxおよびUNIXでの説明 | Microsoft Windows | Microsoft Windowsでの説明 |
---|---|---|---|
|
クライアント・コード・ライブラリ |
|
アプリケーションがリンクする転送機能 |
|
OCI Instant Clientデータの共有ライブラリ |
|
データとコード |
|
セキュリティ・ライブラリ |
|
セキュリティ・ライブラリ |
|
ONSライブラリ |
|
OCIによって内部的に使用されるONSライブラリ |
NA脚注 2 |
NA脚注 2 |
|
記号表 |
脚注 1
Oracle Database 12cリリース1 (12.1)より、libclntshcore.so.12.1
はlibclntsh.so.12.1
およびデータ共有ライブラリから分離されました。libclntsh.so.12.1、libclntshcore.so.12.1およびlibociei.soがインスタント・クライアント・モードで動作するようにするには、これらが同じディレクトリ内に存在する必要があります。
脚注 2
NAは適用されないことを意味します。
動的リンク・ライブラリ(DLL)ごとに1つの.sym
ファイルが提供されます。.sym
がDLLと同じ場所にある場合、WindowsでOCIに障害が発生した際に、関数名を含むスタック・トレースが生成されます。
関連項目:
この表では、Oracle Database 12cリリース1 (12.1)のライブラリ名を使用しています。
Microsoft ODBCおよびOLEDBドライバを使用するには、ociw32.dll
をORACLE_HOME
\bin
ディレクトリからコピーする必要があります。
Instant Clientを使用するのはなぜか。
インストールの際にコピーされるファイルの数が少なくてすみます。
Oracle Databaseのクライアント側で必要なファイル数およびディスク領域の合計が、大幅に少なくなります。
Instant Clientモードでデプロイされたアプリケーションで、機能またはパフォーマンスが損なわれることはありません。
独立したソフトウェア・ベンダーは、アプリケーションを簡単にパッケージ化できます。
Instant Clientライブラリは、Oracle Universal InstallerからInstant Clientオプションを選択するか、次のOracle Technology NetworkのWebサイトのOCIページ(OCIページの下部にあるInstant Clientのリンク)からInstant Clientライブラリをダウンロードしてインストールするかのいずれかでインストールできます。
http://www.oracle.com/technology/tech/oci/instantclient/index.html
Oracle Technology NetworkのWebサイトからInstant Clientライブラリをダウンロードしてインストールするには、次のようにします。
Instant Client共有ライブラリをOracle Database 12cリリース1 (12.1)用の空のディレクトリ(instantclient_12_1
など)にダウンロードし、インストールします。基本パッケージを選択します。
オペレーティング・システム共有ライブラリ・パス環境変数を、手順1のディレクトリに設定します。たとえば、LinuxまたはUNIXでは、LD_LIBRARY_PATH
をinstantclient_12_1
ディレクトリに設定します。Windowsでは、PATH
をinstantclient_12_1
ディレクトリに設定します。
必要ならば、NLS_LANG
環境変数を設定して、クライアント・アプリケーションとそのアプリケーションでオープンされたデータベース接続で使用される言語と地域、およびクライアントのキャラクタ・セット(クライアント・プログラムで入力または表示されるデータ用のキャラクタ・セット)を指定します。NLS_LANG
は、UNIXプラットフォームでは環境変数として設定され、Windowsプラットフォームではレジストリで設定されます。NLS_LANG
環境変数設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
前述の手順を完了すると、OCIアプリケーションを実行できるようになります。
オペレーティング・システムのライブラリ・パス変数によってOCI共有ライブラリにアクセスできる場合、OCIアプリケーションは、Instant Clientモードで動作します。このモードでは、Oracleホームへの依存性はなく、Oracleホームに指定された他のコードおよびデータファイルは、OCIでは不要です(後で説明するtnsnames.ora
ファイルを除きます)。
Oracle Universal InstallerからInstant Clientをインストールするには、次のようにします。
instantclient_12_1
など)にインストールします。LD_LIBRARY_PATH
をインスタント・クライアント・モードで動作するようにインスタント・クライアント・ディレクトリに設定します。NLS_LANG
環境変数を設定して、クライアント・アプリケーションとそのアプリケーションでオープンされたデータベース接続で使用される言語と地域、およびクライアントのキャラクタ・セット(クライアント・プログラムで入力または表示されるデータ用のキャラクタ・セット)を指定します。NLS_LANG
は、UNIXプラットフォームでは環境変数として設定され、Windowsプラットフォームではレジストリで設定されます。NLS_LANG
環境変数設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。クライアントの完全インストールを行った場合(Oracle Universal InstallerでAdmin
オプションを選択)、Instant Client共有ライブラリもインストールされます。クライアントの完全インストールにおけるInstant Client共有ライブラリの場所は、次のとおりです。
LinuxまたはUNIXの場合:
libociei.so
ライブラリは、$ORACLE_HOME/instantclient
にあります。
libclntsh.so.12.1
、libclntshcore.so.12.1
およびlibnnz12.so
は、$ORACLE_HOME/lib
にあります。
Windowsの場合:
oraociei12.dll
ライブラリは、ORACLE_HOME¥instantclient
にあります。
oci.dll
、ociw32.dll
およびorannzsbb12.dll
は、ORACLE_HOME¥bin
にあります。
OCIアプリケーションをInstant Clientモードで実行できるようするには、前述のライブラリを別のディレクトリにコピーして、オペレーティング・システム共有ライブラリ・パスをこのディレクトリがある場所に設定します。
注意:
すべてのライブラリを同じOracleホームからコピーして、同じディレクトリに配置する必要があります。Instant Clientライブラリへのsymlinkの関連付けは、ライブラリの物理的な関連付けに代わるものではありません。
オペレーティング・システムのLibrary Path変数に存在するOracleライブラリは1セットのみである必要があります。つまり、Instant Clientライブラリを含むディレクトリが複数ある場合、それらのディレクトリの1つのみをオペレーティング・システムのLibrary Path上に記載する必要があります。
同様に、Oracleホームベースのインストールを同じシステムに行う場合、オペレーティング・システムのLibrary PathにORACLE_HOME/lib
とInstant Clientディレクトリの両方を記載しないでください(Library Path上での順序も無関係です)。つまり、オペレーティング・システムのLibrary Path変数には、ORACLE_HOME/lib
ディレクトリ(非Instant Clientモードで操作する場合)またはInstant Clientディレクトリ(Instant Clientモードで操作する場合)のいずれかを記載します。
OCCIやJDBC OCIなどのその他の機能を有効にするには、いくつかの追加ファイルをコピーする必要があります。OCCIを有効にするには、OCCIライブラリ(LinuxまたはUNIXではlibocci.so.12.1
、Windowsではoraocci12.dll
)をInstant Clientディレクトリにインストールする必要があります。JDBC OCIドライバの場合、3つのOCI共有ライブラリ以外に、OCI JDBCライブラリ(LinuxまたはUNIXではlibocijdbc12.so
、Windowsではocijdbc12.dll
など)もダウンロードする必要があります。すべてのライブラリをInstant Clientディレクトリに配置します。
注意:
Sparc64などのハイブリッド・プラットフォームでは、JDBC OCIドライバをInstant Clientモードで動作させるために、libociei.so
ライブラリをORACLE_HOME/instantclient32
ディレクトリからInstant Clientディレクトリにコピーします。JDBC OCI Instant Clientに必要なその他すべてのSparc64ライブラリを、ORACLE_HOME/lib32
ディレクトリからInstant Clientディレクトリにコピーします。
Instant Clientは、デプロイメントの選択対象であり、本番アプリケーションの実行に使用できます。
一般的に、Instant Clientがクライアント側の動作専用でないかぎり、Instant Clientを使用して実行されているアプリケーションではすべてのOCI機能を使用できます。したがって、サーバー側の外部プロシージャは、Instant Clientライブラリを使用できません。
開発には、Instant Client SDKを使用することもできます。
Instant Clientはデプロイメント用の機能であるため、OCIアプリケーションの実行に必要なファイルの数およびサイズ(クライアント・フットプリント)が減らされました。
したがって、Instant Client共有ライブラリにパッチを適用するために必要なファイルは、Instant Clientのデプロイメントですべて入手できるわけではありません。パッチの適用には、Oracleホームをベースとした完全なクライアント・インストールが必要です。パッチを適用するには、opatch
ユーティリティを使用します。
Oracleホーム環境にパッチを適用した後、「OCI Instant Clientのインストール」の説明に従って、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
/bin
ディレクトリからそれをコピーできます。
注意:
opatch
ユーティリティは、Windowsでは使用できません。
データ共有ライブラリとzipおよびRPMファイルを再生成するプロセスは、Oracle Database 12cリリース1 (12.1)以上用に変わりました。データ共有ライブラリ、zipおおよびRPMファイルを作成するために、別々のターゲットが個々にまたは一度に追加されます。以前のリリースでは、データ共有ライブラリ、zipおよびRPMファイルの作成のために、1つのターゲットilibociei
が提供されました。ilibociei
では、zipおよびRPMファイルのみが作成されるようになりました。データ共有ライブラリの再生成には、コンパイラとリンカーの両方が必要で、これらはすべてのインストールで使用可能というわけではありません。したがって、データ共有ライブラリの再生成のために、別々のターゲットが追加されています。
注意:
再生成されたInstant Clientバイナリには、再生成を行ったOracle Client AdministratorホームでインストールされたInstant Clientファイルのみが含まれます。そのため、再生成環境に存在するエラー・メッセージ、キャラクタ・セット・エンコーディングおよびタイムゾーン・ファイルは、データ共有ライブラリにパッケージされているもののみです。エラー・メッセージ、キャラクタセット・エンコーディングおよびタイムゾーン・ファイルは、Oracle Client Administratorホームのインストールで選択された各国語に依存します。
OCI Instant Clientデータ共有ライブラリ(libociei.so
)は、ORACLE_HOME
の管理者インストールで次のコマンドを使用することで再生成できます。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk igenlibociei
新しく再生成されたlibociei.so
は、ORACLE_HOME
/instantclient
ディレクトリに置かれます。同じディレクトリにある元の既存のlibociei.so
は、libociei.so0
に名前が変更されます。
Instant Client Lightデータ共有ライブラリ(libociicus.so
)を再生成するには、次のコマンドを使用します。
mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk igenlibociicus
新しく再生成されたlibociicus.so
は、ORACLE_HOME
/instantclient
/light
ディレクトリに置かれます。同じディレクトリにある元の既存のlibociicus.so
は、libociicus.so0
に名前が変更されます。
データ共有ライブラリlibociei.so
とlibociicus.soを再生成するには、次のコマンドを使用します。
mkdir -p $ORACLE_HOME/rdbms/install/instantclient/light cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk igenliboci
新しく再生成されたlibociei.so
は、ORACLE_HOME
/instantclient
ディレクトリに置かれます。同じディレクトリにある元の既存のlibociei.so
は、libociei.so0
に名前が変更されます。
新しく再生成されたlibociicus.so
は、ORACLE_HOME
/instantclient
/light
ディレクトリに置かれます。同じディレクトリにある元の既存のlibociicus.so
は、libociicus.so0
に名前が変更されます。
基本パッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_basic_zip
基本軽量パッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_basiclite_zip
JDBCパッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_jdbc_zip
ODBCパッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_odbc_zip
SQL*Plusパッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_sqlplus_zip
ツール・パッケージ用にzipおよびRPMファイルを再生成するには、次のコマンドを使用します。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk ic_tools_zip
OCI Instant Clientからは、通常のSQLクライアントで可能なすべての方法で、リモート・データベースに接続できます。ただし、Instant ClientにはOracleホーム環境およびディレクトリ構造がないため、一部のデータベース・ネーミング・メソッドには追加の構成手順が必要です。
(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
環境変数を設定する必要があります。
関連項目:
接続記述子の詳細は、『Oracle Database Net Services管理者ガイド』の「ネーミング・メソッドの構成」を参照してください
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 Databaseの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)))"
TWO_TASK
環境変数を次のように指定することもできます。
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ホームの、/network/server6/home/dba/oracle/network/admin
ディレクトリにある場合、ORACLE_HOME
環境変数を次のように設定して、前と同様にSQL*Plusを識別子conn_str
を使用して起動できます。
setenv ORACLE_HOME /network/server6/home/dba/oracle
最後に、tnsnames.ora
がTNS_ADMIN
またはORACLE_HOME
にあれば、TWO_TASK
環境変数を次のように設定して、接続識別子なしでSQL*Plusを起動できます。
setenv TWO_TASK conn_str
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
変数が設定されていない場合、データ共有ライブラリのより大きいデフォルトのtimezlrg_n.dat
ファイルが使用されます。データ共有ライブラリのより小さいtimezone_n.dat
ファイルが使用される場合は、絶対パス名または相対パス名を使用せずに、ORA_TZFILE
環境変数をファイルの名前に設定します。ファイルは、Instant Clientディレクトリのサブディレクトリoracore/zoneinfo
(UNIX/LINUXの場合)またはoracore\zoneinfo
(Microsoft Windowsの場合)にコピーする必要があります。genezi
ユーティリティに-v
オプションを指定して使用すると、タイム・ゾーン・ファイルおよび配置が有効かどうかを検証、またはSQL*Plusを実行できます。
LinuxまたはUNIXの場合:
setenv ORA_TZFILE timezone_n.dat
Windowsの場合:
set ORA_TZFILE=timezone_n.dat
これらの場合、nはタイムゾーン・データ・ファイルのバージョン番号です。
Instant Clientデータ共有ライブラリにパッケージされている大小のタイムゾーン・ファイルのバージョンを特定するには、次のコマンドを入力して、genezi
ユーティリティを実行します。
genezi -v
(データ共有ライブラリが使用できないために) OCIがInstant Clientモードで動作していない場合、以前のOracle Databaseのリリースと同様に、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でサポートされるキャラクタ・セットについて説明します。
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環境ハンドルを使用しても動作できます。
関連項目:
各国語サポート(NLS)の設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください
OCIアプリケーションは、デフォルトで、OCIデータ共有ライブラリlibociei.so
(WindowsではOraociei12.dll
)をLD_LIBRARY_PATH
(WindowsではPATH
)から検索し、アプリケーションがInstant Clientモードで動作するかどうかを判断します。このライブラリが見つからない場合、OCIではInstant Client Lightデータ共有ライブラリ(表1-4を参照)libociicus.so
(WindowsではOraociicus12.dll
)のロードを試みます。Instant Client Lightのライブラリが見つかった場合、アプリケーションはInstant Client Lightモードで動作します。それ以外の場合は、Oracleホームでの完全インストールが想定されます。
表1-4 OCI Instant Client Light共有ライブラリ
LinuxおよびUNIX | LinuxおよびUNIXでの説明 | Windows | Windowsでの説明 |
---|---|---|---|
|
クライアント・コード・ライブラリ |
|
アプリケーションがリンクする転送機能 |
|
OCI Instant Client Lightデータの共有ライブラリ |
|
データとコード |
|
セキュリティ・ライブラリ |
|
セキュリティ・ライブラリ |
該当なし |
該当なし |
|
記号表 |
Instant Client Lightのインストールは、次のいずれかの方法で行うことができます。
OTNから
Oracle Technology Network WebサイトのOCI URL(OCIページの下部にあるInstant Clientのリンク)からInstant Clientリンクに移動します。
http://www.oracle.com/technology/software/tech/oci/instantclient/
Instant Client Lightの場合、basiclite.zip
パッケージを空のinstantclient_12_1
ディレクトリにダウンロードし、解凍します。
クライアントの完全(Adminオプション)インストールから
ORACLE_HOME/instantclient/light
サブディレクトリから、libociicus.so
(WindowsではOraociicus12.dll
)をコピーします。LD_LIBRARY_PATH
(WindowsではPATH
)のInstant Clientディレクトリに、サイズの大きいOCI Instant Clientデータ共有ライブラリlibociicus.so
(WindowsではOraociicus12.dll
)のかわりに、Instant Client Lightデータ共有ライブラリlibociei.so
(WindowsではOraociei12.dll
)を格納します。
Oracle Universal Installerから
Oracle Universal InstallerでInstant Clientオプションを選択した場合、libociei.so
(WindowsではOraociei12.dll
)はインストールのベース・ディレクトリにインストールされ、これらのファイルがLD_LIBRARY_PATH
(WidowsではPATH
)に置かれることになります。
Instant Light Clientデータ共有ライブラリlibociicus.so
(WindowsではOraociicus12.dll
)は、ベース・ディレクトリのlight
サブディレクトリにインストールされ、デフォルトでは無効です。したがって、Instant Client Lightモードを使用するには、OCIデータ共有ライブラリlibociei.so
(WindowsではOraociei12.dll
)を削除するか名前を変更し、Instant Client Lightのライブラリをその環境のlight
サブディレクトリからベース・ディレクトリにコピーする必要があります。
たとえば、Oracle Universal InstallerでInstant ClientをLD_LIBRARY_PATH
(WindowsではPATH
)のmy_oraic_12_1
ディレクトリにインストールした場合、Instant Client Lightモードを使用するには、次を実行する必要があります。
cd my_oraic_12_1 rm libociei.so mv light/libociicus.so .
注意:
インストールに互換性のないバイナリが存在しないように、常に空のディレクトリにInstant Clientのファイルをコピーしインストールしてください。
SDKは、次のOracle Technology Network WebサイトのOCI URL上のInstant Clientリンク(Instant ClientリンクはOCIページの下部にあります)からダウンロードできます。
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
を指定します。アプリケーションをリンクする前に、LD_LIBRARY_PATH
にinstantclient_12_1
ディレクトリを必ず定義します。OCIおよびOCCIプログラムでは、instantclient_12_1
ディレクトリにシンボリック・リンクlibclntsh.so
およびlibocci.so
を配置する必要があります。リンク・ステップの前に、demo.mk
によりこれらのリンクが作成されます。これらのシンボリック・リンクは、シェルで作成することもできます。
cd instantclient_12_1 ln -s libclntsh.so.12.1 libclntsh.so ln -s libocci.so.12.1 libocci.so
また、SDKには、アプリケーション・ヘッダー・ファイルを生成するための、Object Type Translator (OTT)ユーティリティとそのクラスが含まれます。