SQL*Loader is mijn favoriete manier om grote datavolumes in bulk in Oracle te laden. Gebruik de optie voor het invoegen van direct pad voor maximale snelheid, maar begrijp de impact van belastingen via het directe pad (alle gegevens worden bijvoorbeeld ingevoegd voorbij de hoogwatermarkering, wat prima is als u uw tabel afkapt). Het heeft zelfs een tolerantie voor slechte rijen, dus als uw gegevens "enige" fouten bevatten, kan het nog steeds werken.
SQL*Loader kan indexen opschorten en ze allemaal aan het einde bouwen, waardoor bulkinvoeging erg snel gaat.
Voorbeeld van een SQL*Loader-aanroep:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
En de mydata.ctl zou er ongeveer zo uitzien:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
Als alternatief ... als u gewoon de volledige inhoud van de ene tabel naar de andere kopieert, over databases heen, kunt u dit doen als uw DBA een DBlink instelt (een proces van 30 seconden), ervan uitgaande dat uw DB is ingesteld met de ruimte voor opnieuw uitvoeren om bereik dit.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Het gebruik van de /* +append */
hint kan nog steeds gebruik maken van direct pad invoegen.