TOracleDirectPathLoader component

Properties                Methods                Example

Top  Previous  Next

Unit

Oracle

説明

ToracleDirectPathLoaderコンポーネントでアプリケーションが、SQL*Loaderにも使われているOracle ServerDirect Path Loadエンジンをアクセスすることが出来ます。 これは外部データをメモリからデータベースへ可能な限り高速に読み込めるようにします。 個々のレコードを挿入するのにInsert SQL命令を使う代わりに、メモリ内の外部データはテーブルの実際のデータベースブロックにすぐさま書き込まれる書式に変換されます。 これにより、基本的にはInsert命令を処理するArray DMLよりも速くなります。

この速度の利点がある代わりにいくつかの制約があります:

w        テーブルに対してトリガーが使えません。 トリガー付きのテーブルにデータを読み込もうとすると、"ORA-26086 direct path does not support triggers"となります。 一時的にテーブルのトリガーを無効にすることが出来ます。
w        テーブルに対するチェック制約とフォーリンキー制約は使えません。 そのようなテーブルにデータを読み込もうとすると、"ORA-26087 direct path does not support referential or check constraints"となります。 一時的にテーブルの制約を無効にできます。プライマリーとユニークキー制約は使うことが出来ます。
w        リモートテーブルには読み込まれません。
w        ユーザー定義型はテーブルに使えません。
w        Direct Path LoadインターフェースはNet8 8.1 (Oracle8iクライアント)以降でのみ有効です。
w        load操作は"normal"トランザクションの一部ではありません。

これらの難点がDML配列に助けを求める理由かもしれません。DML配列はこれら制約の影響をうけませんし、その上最高のバッチ読み込みパフォーマンスを提供してくれます。 しかしながら、ToracleDirectPathLoaderの速度の優位性は考慮すべきものがあります。 例えば、ペンティアムIIIクラスサーバーの機器設定でローカルのデータベースへインデックスなしの40バイトの2カラムを持つテーブルへ10,000レコードの読み込みは、次のベンチマーク結果を示します:

Single Inserts:                 1,500 records / second

Array Inserts:                15,000 records / second

Direct Path Loading:                60,000 records / second

結果はパラメーターの違いにより変わってきます。 例えば、テーブルが一つ以上のインデックスを持っていると、それぞれの挿入された列に対してよりオーバーヘッドが発生します。そしてそれぞれの結果はより近いものとなるでしょう。

ToracleDirectPathLoaderコンポーネントを使う

TOracleDirectPathLoaderコンポーネントを使っているテーブルへ外部データを読み込むために、次のタスクを実行する必要があります:

1.        ToracleDirectPathLoaderコンポーネントをセットアップします

設計時にToracleDirectPathLoaderインスタンスを作成したあと、それをSessionにリンクしてTableNameを規定します。 次にColumnsプロパティエディタを通じて読み込みたいカラムを定義し、ます。それぞれのカラムに対して、外部data typedata sizeとデータに対して外部date formatを定義する必要があります。

2.        読み込みのためにToracleDirectPathLoaderを準備する

Prepareプロシージャーの呼び出しはレコードのバッチに対する配列を作成します。 この配列にフィットするレコードの数はBufferSizeプロパティとカラムの数、データサイズによります。

3.        データ配列を満たし、読み込み

データ配列にフィットするバッチに外部データを分割する必要があります。Prepareを呼び出したあと、 データ配列のサイズはMaxRowsプロパティによって定義されます Direct Path Loadエンジンはメモリ内の配列からしかデータを読み込むことが出来ないので、それぞれのバッチは完全にメモリに読まれないといけません。Columns[Index].SetDataプロシージャーを呼ぶことで配列にそれぞれの要素を満たします。 配列からデータをテーブルに読み込むためにLoadプロシージャーを呼ぶことが出来ます。

4.        読み込み処理を完了する

全ての外部データを個々のバッチとして処理したあと、読み込まれたデータをコミットするためにはFinishプロシージャーを呼んでください。 読み込み操作をアンドゥするためには、代わりにAbort プロシージャーを呼んでください。