TAKTUM Logo


Oracle Schulung
Oracle Schulung

Oracle SQL*Loader Tutorial: Steuerdatei
Beschreibung des Aufbaus und Optionen der Steuerdatei (control file)

Die Steuerdatei

Die Steuerdatei kann eine Reihe von Befehlen enthalten. Die Reihenfolge der Befehle ist relevant. Es stehen unter anderem folgende Befehle zur Verfügung:

options (...)
unrecoverable / recoverable
load data
characterset
insert / append / replace / truncate
preserve blanks
infile
badfile
discardfile
concatenate
into table
when
trailing nullcols
(spaltenbeschreibung)

Der Befehl "load data" kann keine besondere Bedeutung. Er kann in besonderen Spezialfällen durch den Befehl "continued load" ersetzt werden.

Kommentare

Kommentare können an beliebiger Stelle der Steuerdatei eingebracht werden. Sie beginnen mit zwei waagerechten Bindestrichen und gehen bis zum Ende der Zeile.

Optionen

Bestimmte Einstellungen sind sowohl als Kommandozeilen-Parameter als auch in der Steuerdatei einstellbar. Für die Beschreibung der einzelnen Parameter siehe unten.

Der Syntax in der Steuerdatei ist wie folgt:

options (<paramter1>=wert1, <parameter2>=wert2, ... )

Beispiel:
options (rows = 1000, silent = (errors, discards))

Laden ohne Redo (unrecoverable)

Einstellung in der Steuerdatei:

recoverable Redo-Informationen schreiben

unrecoverable keine Redo-Informationen schreiben

Der Ladevorgang mit der Einstellung "unrecoverable" ist erheblich schneller. Sie bewirkt, daß über den Ladevorgang keine Redo-Informationen von der Datenbank geschrieben werden. Je nach Datenbank-Modus (Archive-Log-Mode) kann es passieren, daß die Daten in bestimmten Fehlerfällen verloren gehen können. Um dies zu verhindern, sollte nach dem Ladevorgang eine Komplettsicherung der Datenbank vorgenommen werden.

Einstellung des Zeichensatzes (characterset)

Einstellung in der Steuerdatei:
characterset <zeichensatz> Zeichensatz einstellen

Damit Umlaute und Sonderzeichen korrekt umgesetzt werden, ist die Angabe des Zeichensatzes, in dem die externen Datendateien vorliegen, anzugeben. Für den Windows-Zeichensatzs ist dies WE8ISO8859P1, für DOS WE8PC850.

Beispiel:
characterset WE8ISO8859P1

Vorsicht: Wenn der Zeichensatz nicht gesetzt ist, so wird die Definition der Umgebungsvariable NLS_LANG verwendet. Das direkte Laden (siehe Kapitel 3) erwartet in diesem Fall jedoch, das die Daten in demselben Zeichensatz vorliegen, der dem Zeichensatz der Datenbank entspricht.

Aus diesem Grund sollte der Zeichensatz immer angegeben werden.

Laden in nicht leere Tabellen (insert, append, replace, truncate)

Einstellung in der Steuerdatei:

insert Laden nur in leere Tabellen möglich (default)
append Daten werden hinzugefügt
replace alle Daten der betroffenen Daten werden vorher gelöscht
truncate wie "replace"; es werden jedoch unbenutzte Speicherbereiche freigegeben (extents)

Vorsicht: Bei "replace" und "truncate" werden alle Daten der betreffenden Tabelle vorher gelöscht, unabhängig davon, welche Daten beim Ladevorgang hinzugefügt werden. Alle Daten der Tabelle sind unwiederbringlich verloren!

Leerzeichen beibehalten (preserve blanks)

Einstellung in der Steuerdatei:

preserve blanks Leerzeichen werden nicht abgeschnitten

Normalerweise werden bei festen Feldlängen führende und nachfolgende Leerzeichen abgeschnitten. Durch die Angabe von "preserve blanks" läßt sich dieses verhindern.

Festlegung der Dateinamen (infile, badfile, discardfile)

Einstellung in der Steuerdatei:

infile <dateiname> externe Eingabedatei
badfile <dateiname> Bad File (siehe Kapitel 1)
discardfile <dateiname> Discard File (siehe Kapitel 1)

Die Dateinamen sind in einfache Hochkommata (') einzuschließen.

Beispiel:
infile 'daten\test.dat'

Je nach Version der Oracle-Software kann es notwendig sein, das Zeichen Backslash (\) zu maskieren.

Beispiel:
infile 'daten\\test.dat'

Datensätze zusammenfassen (concatenate)

Einstellung in der Steuerdatei:

concatenate <anzahl> feste Anzahl von Zeilen zusammenfassen

Dieser Befehl bewirkt das eine definierte Anzahl von Zeilen in der Eingabedatei logisch zusammengefaßt werden, weil in der Eingabedatei nicht alle Daten eines Datensatzes in einer Zeile plaziert werden können.

Beispiel:
concatenate 2

Angabe der Zieltabelle (into table)

Einstellung in der Steuerdatei:

into table <tabelle> Zieltabelle in der die Daten abgelegt werden soll

Weitere Einstellungsmöglichkeiten je Tabelle sind "when" und "trailing".

Bedingtes Laden (when)

Einstellung in der Steuerdatei:

when <bedingung1> and <bedingung2> ... Bedingung, ob die Daten in die Tabelle (siehe "into table") geladen werden sollen

Wenn es vom Inhalt der Daten abhängt, in welche Tabelle die Daten geschrieben werden sollen, so ist mit der when-Klausel die entsprechende Bedingung zu definieren. Auf diese Weise lassen sich Verteiler implementieren.

Beispiel:
into table fertige_auftraege when status='F'
(<felddefinitionen>)

into table stornierte_auftraege when status='S'
(<felddefinitionen>)

Fehlende leere Endspalten (trailing nullcols)

Einstellung in der Steuerdatei:

trailing nullcols Fehlende leere Endspalten ignorieren

Wenn in der Eingabedatei leere Felder am Ende der Datei fehlen, weil Leerzeichen am Ende einer Zeile entfernt wurden, verhindert "trailing nullcols", daß diese Zeilen zu Fehlern führen. Die entsprechenden Spalten in der Datenbanktabelle erhalten dann den Wert NULL (leerer Wert).

Dieses Vorgehen funktioniert jedoch nicht, bei absoluter Positionierung (siehe oben).

Definition der Felder

Für jedes Feld muß der Spaltenname in der Datenbanktabelle, die Position innerhalb der Eingabedatei, der Datentyp und mögliche Feldende- oder Einschlußzeichen.

Position innerhalb der Eingabedatei

Es gibt zwei Möglichkeiten, die Position eines Feldes in der Eingabedatei zu bestimmen. Bei der absoluten Positionierung wird die Start- und Endespalte innerhalb des logischen Datensatzes angegeben.

Beispiel:
auftrag_nr position(1:10) decimal external,
kunden_nr position(11:17) char

Bei der relativen Positionierung wird davon ausgegangen, daß alle Felder von links nach rechts angegeben werden (siehe auch Kapitel 2.12.3).

Beispiel:
auftrag_nr decimal external,
kunden_nr char

Datentypen

Normalerweise ist es nicht nötig, die Datentypen der jeweiligen Felder anzugeben. Die Felder werden automatisch in die Typen der entsprechenden Tabellenspalten konvertiert. Eine Angabe der Datentypen muß nur bei binären Daten erfolgen.

Die drei wesentlichen Datentypen sind "char", "decimal external" und "date". Bei Daten, die ein Datum repräsentieren, ist das Datumsformat anzugeben.

Beispiel:
auftrag_nr position(1:10) decimal external,
kunden_nr position(11:17) char,
datum position(18:27) date "dd.mm.yyyy"

Trennung von Feldern

Wenn die Feldpositionen relativ zu einander angegeben werden, muß klar sein, wo ein Feld endet und das nächste beginnt. Dazu wird entweder ein Endezeichen ("terminated by") oder Einschlußzeichen ("enclosed by") oder beides festgelegt.

Beispiel:
auftrag_nr terminated by whitespace,
kunden_nr position(11:17) terminated by ',',
datum enclosed by '(' and ')'

In den Beispiel wird die Auftragsnummer von einem Leerzeichen, Tabulatorzeichen oder dem Zeilenende terminiert (whitespace). Der Auftragsnummer folgt immer ein Komma und das Datum ist immer geklammert. Auch der optionale Einschluß ist möglich:

datum optionally enclosed by '(' and ')'

Das Datum kann geklammert sein.

Leere Felder

Wenn Felder vollständig aus Leerzeichen bestehen, so ist über den Befehl "nullif" die Datenbankspalte auf den leeren Wert NULL konvertierbar.

Beispiel:
bemerkung nulliff datum=blanks

Weitere Bedingungen, die zu NULL-Werten führen sind möglich.



Stichwörter

Load Daten Fremddaten Laden Steuerdatei controlfile control file load data options unrecoverable recoverable load data characterset insert append replace truncate preserve blanks infile badfile discardfile concatenate into table when trailing nullcols