SQL*Loader er min foretrukne måde at masseindlæse store datamængder i Oracle. Brug muligheden for direkte stiindsættelse for maks. hastighed, men forstå virkningerne af belastninger med direkte sti (f.eks. indsættes alle data forbi højvandsmærket, hvilket er fint, hvis du afkorter din tabel). Det har endda en tolerance for dårlige rækker, så hvis dine data har "nogle" fejl, kan det stadig fungere.
SQL*Loader kan suspendere indekser og bygge dem alle i slutningen, hvilket gør masseindsættelse meget hurtig.
Eksempel på et SQL*Loader-kald:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
Og mydata.ctl ville se sådan ud:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
Alternativt... hvis du bare kopierer hele indholdet af en tabel til en anden, på tværs af databaser, kan du gøre dette, hvis din DBA sætter et DBlink op (en 30 sekunders proces), forudsat at din DB er sat op med redo-rummet til opnå dette.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Brugen af /* +append */
tip kan stadig gøre brug af direkte stiindsættelse.