O SQL*Loader é minha maneira favorita de carregar grandes volumes de dados em massa no Oracle. Use a opção de inserção de caminho direto para velocidade máxima, mas entenda os impactos das cargas de caminho direto (por exemplo, todos os dados são inseridos além da marca d'água alta, o que é bom se você truncar sua tabela). Ele ainda tem tolerância para linhas ruins, portanto, se seus dados tiverem "alguns" erros, ainda poderão funcionar.
O SQL*Loader pode suspender índices e construí-los todos no final, o que torna a inserção em massa muito rápida.
Exemplo de uma chamada SQL*Loader:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
E o mydata.ctl ficaria assim:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
Alternativamente... se você está apenas copiando todo o conteúdo de uma tabela para outra, entre bancos de dados, você pode fazer isso se seu DBA configurar um DBlink (um processo de 30 segundos), pressupondo que seu banco de dados esteja configurado com o espaço de redo para realizar isso.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
O uso do
/* +append */
dica ainda pode fazer uso de inserção de caminho direto.