Lassen Sie mich Ihnen ein Beispiel einer Steuerdatei zeigen, die ich verwende, um eine sehr große Datei (120 Millionen Datensätze pro Tag) zu laden
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
....
....)
Einige Überlegungen
- Das Laden nach Positionen ist immer schneller als das Verwenden von Trennzeichen
- Verwenden Sie die Optionen von
PARALLEL
,MULTITHREADING
undDIRECT
um die Ladeleistung zu optimieren. UNRECOVERABLE
ist auch ein guter Rat, wenn Sie die Datei immer haben, falls Sie die Datenbank wiederherstellen müssen, müssen Sie die Daten erneut laden.- Verwenden Sie den entsprechenden Zeichensatz.
- Die Klausel TRAILING NULLCOLS weist SQL*Loader an, alle relativ positionierten Spalten, die nicht im Datensatz vorhanden sind, als Nullspalten zu behandeln.
- Position bedeutet, dass jede Zeile Daten ohne Trennzeichen enthält, sodass Sie die Position jedes Felds in der Tabelle anhand der Länge kennen.
AAAAABBBBBBCCCCC19828733UUUU
- Wenn Ihre txt- oder csv-Datei ein Feldtrennzeichen hat, sagen wir Semikolon, dann müssen Sie
FIELDS DELIMITED BY
verwenden
Diese wird in einer Steuerdatei gespeichert, normalerweise einer Textdatei mit der Erweiterung ctl. Dann rufen Sie von der Befehlszeile
aufsqlldr userid=youuser/[email protected]_string control=/path_to_control_file/control_file.ctl