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 секунди), като се предполага, че вашата DB е настроена с пространството за повторение за постигнете това.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Използването на /* +append */
намек все още може да използва вмъкване на директен път.