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)
... В качестве альтернативы, если вы просто скопировать все содержимое одна таблица в другую, через базы данных, вы можете сделать это, если ваш DBA настроит DBlink (30-секундный процесс), предполагая, что ваша БД настроена с повторным пространством для этого.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Использование /* +append */
намека еще может использовать прямую вставку пути.
Какая у вас свалка? являются ли эти файлы списком инструкций вставки или что-то еще? – Aleksej