SQL*Loader ist meine bevorzugte Methode zum Massenladen großer Datenmengen in Oracle. Verwenden Sie die Direktpfad-Einfügeoption für maximale Geschwindigkeit, aber verstehen Sie die Auswirkungen von Direktpfadlasten (z. B. werden alle Daten über die obere Grenze hinaus eingefügt, was in Ordnung ist, wenn Sie Ihre Tabelle abschneiden). Es hat sogar eine Toleranz für fehlerhafte Zeilen, sodass es immer noch funktionieren kann, wenn Ihre Daten "einige" Fehler aufweisen.
SQL*Loader kann Indizes aussetzen und am Ende alle aufbauen, was das Masseneinfügen sehr schnell macht.
Beispiel für einen SQL*Loader-Aufruf:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
Und die mydata.ctl würde etwa so aussehen:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
Alternativ ... wenn Sie nur den gesamten Inhalt einer Tabelle datenbankübergreifend in eine andere kopieren, können Sie dies tun, wenn Ihr DBA einen DBlink einrichtet (ein 30-Sekunden-Prozess), vorausgesetzt, Ihre DB ist mit dem Redo-Speicherplatz eingerichtet erreichen.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Die Verwendung von /* +append */
Hint kann immer noch Direct Path Insert verwenden.