SQL * Loaderは、大量のデータをOracleに一括ロードするための私のお気に入りの方法です。最大速度にはダイレクトパス挿入オプションを使用しますが、ダイレクトパス負荷の影響を理解します(たとえば、すべてのデータは最高水準点を超えて挿入されます。これは、テーブルを切り捨てる場合は問題ありません)。不良行に対する許容度もあるため、データに「いくつかの」間違いがある場合でも機能します。
SQL * Loaderは、インデックスを一時停止し、最後にすべてを構築できるため、一括挿入が非常に高速になります。
SQL * Loader呼び出しの例:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
そして、mydata.ctlは次のようになります:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
または...データベース間で1つのテーブルの内容全体を別のテーブルにコピーするだけの場合、DBAがDBlink(30秒のプロセス)を設定すると、DBにREDOスペースが設定されていることを前提としてこれを行うことができます。これを達成します。
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
/* +append */
の使用 ヒントは引き続きダイレクトパス挿入を利用できます。