SQL*Loader to mój ulubiony sposób na zbiorcze ładowanie dużych ilości danych do Oracle. Użyj opcji wstawiania ścieżki bezpośredniej, aby uzyskać maksymalną prędkość, ale zrozum wpływ obciążeń ze ścieżką bezpośrednią (na przykład wszystkie dane są wstawiane za znakiem wysokiej wody, co jest w porządku, jeśli obcinasz tabelę). Ma nawet tolerancję na złe wiersze, więc jeśli Twoje dane zawierają „pewne” błędy, nadal może działać.
SQL*Loader może zawiesić indeksy i zbudować je wszystkie na końcu, co sprawia, że wstawianie zbiorcze jest bardzo szybkie.
Przykład wywołania SQL*Loader:
$SQLDIR/sqlldr /@MyDatabase direct=false silent=feedback \
control=mydata.ctl log=/apps/logs/mydata.log bad=/apps/logs/mydata.bad \
rows=200000
A mydata.ctl wyglądałby mniej więcej tak:
LOAD DATA
INFILE '/apps/load_files/mytable.dat'
INTO TABLE my_schema.my_able
FIELDS TERMINATED BY "|"
(ORDER_ID,
ORDER_DATE,
PART_NUMBER,
QUANTITY)
Alternatywnie... jeśli po prostu kopiujesz całą zawartość jednej tabeli do drugiej, między bazami danych, możesz to zrobić, jeśli Twój DBA skonfiguruje DBlink (proces 30-sekundowy), zakładając, że Twoja baza danych jest skonfigurowana z miejscem na ponowne wykonanie to osiągnąć.
truncate table my_schema.my_table;
insert into my_schema.my_table
select * from [email protected]_remote_db;
Użycie /* +append */
wskazówka może nadal korzystać z bezpośredniego wstawiania ścieżki.