Нека ви покажа пример за контролен файл, който използвам за зареждане на много голям файл (120 милиона записа всеки ден)
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
....
....)
Някои съображения
- Винаги е по-бързо зареждането по позиции, отколкото използването на разделители
- Използвайте опциите на
PARALLEL
,MULTITHREADING
иDIRECT
за оптимизиране на производителността на зареждане. UNRECOVERABLE
също е добър съвет, ако винаги имате файла, в случай че трябва да възстановите базата данни, трябва да заредите данните отново.- Използвайте подходящия набор от знаци.
- Клаузата TRAILING NULLCOLS казва на SQL*Loader да третира всички относително позиционирани колони, които не присъстват в записа, като нулеви колони.
- Позиция означава, че всеки ред съдържа данни без разделител, така че да знаете позицията на всяко поле в таблицата по дължината.
AAAAABBBBBBCCCCC19828733UUUU
- Ако вашият txt или csv файл има разделител на полета, да кажем точка и запетая, тогава трябва да използвате
FIELDS DELIMITED BY
Това се съхранява в контролен файл, обикновено текстов файл с разширение ctl. След това извиквате от командния ред
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl