ここから本文です

SQLローダーでダイレクトパス か 従来型パスがありますが、意味がわかりません。ど...

zgm********さん

2013/7/1418:11:40

SQLローダーでダイレクトパス か 従来型パスがありますが、意味がわかりません。どういう意味なのでしょうか?

閲覧数:
2,817
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

sun********さん

2013/7/1615:28:48

従来型パスはデータをSQLのINSERT文に変換してデータを追加します。
配列を使用して1回で複数行追加しますが、通常通りINSERT文で追加するのと変わりません。

一方、ダイレクトパスはブロック(データファイル内の構造)を作成して直接データファイルに書き込みます。
SQL文のINSERTは使用しません。SQL文の解析、実行等を省略するので、その分高速になります。
バッファキャッシュにものりません。
但し、DELETE文などで空きができた使用可能なブロックを探す処理もバイパスされるため、HWMよりも後ろに挿入されます(つまり必ずセグメントが太ります)。

質問した人からのコメント

2013/7/21 08:45:15

簡潔で分かりやすい説明、ありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

ys1********さん

2013/7/1616:24:08

<従来型パス・ロード>
従来型パス・ロード(デフォルト)では、SQL INSERT文とバインド配列バッファを使用して、データをデータベース表にロードします。この方法は、すべてのOracleのツール製品およびApplicationsで使用されます。
SQL*Loaderで従来型パス・ロードを実行する場合、バッファ・リソースに関して他のすべてのプロセスと同等の処理が行われるため、競合が発生します。このため、ロードにかなりの時間がかかります。また、SQL文が生成され、Oracleに渡されてから実行されるため、さらにオーバーヘッドが発生します。
挿入が発生すると、常に、Oracleデータベースで空き領域のあるブロック(ディスク内に散在して、部分的に書込み可能なブロック)が検索され、そこにデータが書き込まれます。通常のデータベース使用の場合はそれほどでもありませんが、このアクションは大量データのロード速度を大幅に低下させることがあります。


<ダイレクト・パス・ロード>
バインド配列バッファに書き込むかわりに、SQL INSERT文を使用して、バインド配列をOracleデータベースに渡します。ダイレクト・パス・ロードは、ダイレクト・パスAPIを使用して、ロードされるデータをサーバーのロード・エンジンに渡します。ロード・エンジンは、渡されたデータから列配列構造体を作成します。
ダイレクト・パス・ロード・エンジンは、列配列構造体を使用してOracleデータ・ブロックをフォーマットし、索引キーを作成します。新しくフォーマットされたデータベース・ブロックが直接データベースに書き込まれます(ホスト・プラットフォームが非同期I/Oをサポートしている場合、非同期書込みを使用して1つのI/O要求に対して複数のブロックを書き込むことができます)。
内部的には、フォーマットされたブロック用に複数のバッファが使用されます。ホスト・プラットフォームで非同期I/Oが可能な場合は、あるバッファに書き込んでいる間に1つ以上のバッファへの書込みが行われます。この場合、I/Oを伴う処理がオーバーラップするため、ロード・パフォーマンスが向上します。

hol********さん

2013/7/1503:49:18

大雑把に書くと、従来型パスは1件ずつインサート
ダイレクトパスは、全データを流し込んでから、インデックスの作成なんかの処理を行います

大きな差としてはテーブルにインデックスが多数ある場合や、データ件数が多い場合に
ダイレクトパスロードを用いると高速にロードできます・・・が
テーブルロックがかかるなどデメリットもあります
詳しくは以下のURL等で

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/...

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる