1

Oracle (10gR2) を使用して BULK INSERT を処理する最善の方法を見つけようとしていますが、かなり複雑な問題になる可能性があることがわかりました。私が見つけた方法の 1 つは、Append オプティマイザー ヒントを使用することです。

INSERT /*+ Append*/
INTO some_table (a, b)
VALUES (1, 2)

私の理解では、これによりOracleはインデックスを無視し、結果をテーブルの最後に置くようになります。次に、インデックスを再構築するだけです。

ALTER INDEX some_index REBUILD

これは、SQL*Loader を外部プロセスとして起動したり、pl/SQL を実行したりするよりも簡単です。これはほとんど簡単すぎるようです。足りないものはありますか?私がこのアプローチを取った場合、私を噛むために戻ってくる可能性のあるものはありますか?

4

1 に答える 1

2

いくつかのメモ...

  1. 単一の行を追加することはできないため、APPEND は INSERT INTO ... SELECT FROM 構文でのみ有効です。
  2. 追加は、テーブルの最高水位標を超えるデータの追加です。この場合、データは完全なブロックにフォーマットされ、テーブルに書き込まれ、SQL エンジンをバイパスします。
  3. 並列モードでの追加では、各並列クエリ スレッドが、新しいブロックが書き込まれるテーブルに少なくとも 1 つの新しいエクステントを割り当てる必要があります。これはスペースの無駄になる可能性があります。
  4. インデックスは無視されませんが、ブロックがテーブルに書き込まれるまでインデックスのメンテナンスは延期されます。

より重要な情報については、次のドキュメントを参照してください: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tables.htm#ADMIN01509

于 2009-07-30T15:04:13.107 に答える