Pokażę Ci przykład pliku kontrolnego, którego używam do ładowania bardzo dużego pliku (120 milionów rekordów każdego dnia)
OPTIONS (SKIP=0, ERRORS=500, PARALLEL=TRUE, MULTITHREADING=TRUE, DIRECT=TRUE, SILENT=(ALL))
UNRECOVERABLE
LOAD DATA
CHARACTERSET WE8ISO8859P1
INFILE '/path_to_your_file/name_of_the_file.txt'
BADFILE '/path_to_your_file/name_of_the_file.bad'
DISCARDFILE '/path_to_your_file/name_of_the_file.dsc'
APPEND
INTO TABLE yourtablename
TRAILING NULLCOLS
(
COLUMN1 POSITION(1:4) CHAR
,COLUMN2 POSITION(5:8) CHAR
,COLUMN3 POSITION(9:11) CHAR
,COLUMN4 POSITION(12:18) CHAR
....
....)
Kilka uwag
- Zawsze ładowanie według pozycji jest szybsze niż przy użyciu ograniczników
- Użyj opcji
PARALLEL
,MULTITHREADING
iDIRECT
aby zoptymalizować wydajność ładowania. UNRECOVERABLE
jest również dobrą radą, jeśli zawsze masz plik na wypadek konieczności odzyskania bazy danych, musisz ponownie załadować dane.- Użyj odpowiedniego zestawu znaków.
- Klauzula TRAILING NULLCOLS mówi SQL*Loaderowi, aby traktował wszystkie względnie pozycjonowane kolumny, których nie ma w rekordzie, jako kolumny puste.
- Pozycja oznacza, że każdy wiersz zawiera dane bez ogranicznika, dzięki czemu znasz pozycję każdego pola w tabeli według długości.
AAAAABBBBBBCCCCC19828733UUUU
- Jeśli Twój plik txt lub csv ma separator pól, powiedzmy średnik, musisz użyć
FIELDS DELIMITED BY
Jest on przechowywany w pliku kontrolnym, zwykle pliku tekstowym z rozszerzeniem ctl. Następnie wywołujesz z wiersza poleceń
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl