Låt mig visa dig ett exempel på en kontrollfil som jag använder för att ladda en mycket stor fil (120 miljoner poster varje dag)
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
....
....)
Några överväganden
- Det går alltid snabbare att ladda efter positioner än att använda avgränsare
- Använd alternativen för
PARALLEL
,MULTITHREADING
ochDIRECT
för att optimera laddningsprestanda. UNRECOVERABLE
är också ett bra råd om du alltid har filen ifall du behöver återställa databasen, måste du ladda data igen.- Använd lämplig teckenuppsättning.
- Klausulen TRAILING NULLCOLS säger åt SQL*Loader att behandla alla relativt placerade kolumner som inte finns i posten som nollkolumner.
- Position betyder att varje rad innehåller data utan någon avgränsare, så att du vet positionen för varje fält i tabellen efter längden.
AAAAABBBBBBCCCCC19828733UUUU
- Om din txt- eller csv-fil har en fältseparator, låt oss säga semikolon, måste du använda
FIELDS DELIMITED BY
Detta lagras i en kontrollfil, normalt en textfil med tillägget ctl. Sedan anropar du från kommandoraden
sqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl