8.2
SQL*Loader
235
8.2 SQL*Loader
Mit dem SQL*Loader können Textdateien in unterschiedlichen Formaten in die
Oracle-Datenbank geladen werden. Eine Datenübernahme aus anderen Systemen
ist damit auf einfache Art möglich. Der SQL*Loader verfügt über ein Kommando-
zeilen-Utility mit dem Namen »sqlldr«.
Dem SQL*Loader müssen Parameter und Optionen mitgegeben werden. Diese
können in der Kommandozeile oder im Control File spezifiziert werden. Neben
einem Logfile schreibt der SQL*Loader Bad Files und Discard Files. Darin werden
Daten gespeichert, die nicht in die Datenbank geladen werden konnten. Im Bad
File befinden sich Daten, die von der Datenbank abgewiesen wurden. Dagegen
werden in das Discard File solche Daten geschrieben, die nicht den im Control File
spezifizierten Kriterien entsprechen.
Abb. 8.6: Architektur des SQL*Loader
8.2.1 Daten laden
Der SQL*Loader unterscheidet die folgenden drei Modi:
Conventional Path Load
Direct Path Load
External Table Load
Kapitel 8
Schnittstellen
236
Beim Conventional Path Load werden die Eingabesätze verarbeitet und in einem
Bind Array (Memory-Bereich) gespeichert. Ist dieser Bereich voll, wird das Array
in die Datenbank geladen.
Der Direct Path Load bildet ein Spalten-Array. Über einen Blockformatierer werden
die Daten direkt in die Datenbank geschrieben. Diese Methode ist wesentlich schnel-
ler als der Conventional Path Load, besitzt allerdings einige Einschränkungen:
Externe Tabellen liegen außerhalb der Datenbank und besitzen ein Format, das
durch den Zugriffstreiber definiert ist. Damit können auch Flat Files durch eine
INSERT-Anweisung geladen werden. Diese Methode ist interessant, da sie ein par-
alleles Laden ermöglicht, ohne dass vorher die Input-Dateien aufgeteilt werden
müssen. Wenn Sie keinen Zugriff auf den Datenbankserver haben, um die exter-
nen Tabellen abzulegen, dann ist diese Methode weniger geeignet. Der SQL*Loa-
der ist dagegen in der Lage, Dateien vom Client über das Netzwerk zu laden.
Im folgenden Beispiel wird eine typische csv-Datei, so wie sie aus einem Excel
Sheet erstellt werden kann, mit dem SQL*Loader geladen. Es wird eine csv-Datei
in dem Format geladen, wie es direkt aus Excel entsteht.
Wir erstellen eine Kontrolldatei für den SQL*Loader. Darin müssen Pfad und
Name der csv-Datei mit der Option »infile« angegeben werden. Als Delimiter
legen wir das Komma fest. Die Option »optionally enclosed« teilt dem Loader mit,
dass Strings in doppelte Hochkommas eingeschlossen sein können. Mit »trailing
nullcols« werden leere Felder zugelassen. Schließlich werden die einzelnen Spal-
ten der Tabelle aufgelistet. Hier können weitere Optionen angegeben werden, um
zum Beispiel eine Formatierung der Spalte durchzuführen. In Zeile drei wurde
noch die Option »truncate« verwendet. Der SQL*Loader führt damit vor dem
Laden ein »TRUNCATE« der Tabelle aus.
100,"Steven","King","SKING","515.123.4567",17.06.03,"AD_PRES",24000,,,90
101,"Neena","Kochhar","NKOCHHAR","515.123.4568",21.09.05,"AD_VP",17000,,100,90
102,"Lex","De Haan","LDEHAAN","515.123.4569",13.01.01,"AD_VP",17000,,100,90,60
. . .
Listing 8.16: Format der csv-Datei
load data
infile '/opt/oracle/export/employees.csv'
truncate
into table hr.employees
fields terminated by ','
optionally enclosed by '"'
trailing nullcols
(EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
8.2
SQL*Loader
237
Damit sind alle Voraussetzungen für das Laden der csv-Datei geschaffen. Durch
Aufruf des Utilities »sqlldr« erfolgt der Ladeprozess. Die csv-Datei muss sich auf
dem Computer befinden, auf dem der Client läuft. Damit ist zum Beispiel ein
Laden von einem Client über das Netzwerk möglich, ohne dass die Dateien auf
den Datenbankserver kopiert werden müssen.
In der Logdatei »load_employees.log« finden Sie das Ergebnis des Ladeprozesses.
Unter anderem finden Sie eine Zusammenfassung mit der Anzahl von Sätzen, die
erfolgreich geladen wurden.
PHONE_NUMBER,
HIRE_DATE,
JOB_ID,
SALARY,
COMMISSION_PCT,
DEPARTMENT_ID)
Listing 8.17: SQL*Loader-Kontrolldatei
$ sqlldr system/manager control=load_employees.ctl
SQL*Loader: Release 12.1.0.1.0 – Production on Sat Mar 8 12:12:03 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Path used: Conventional
Commit point reached – logical record count 64
Commit point reached – logical record count 107
Table HR.EMPLOYEES:
107 Rows successfully loaded.
Check the log file:
load_employees.log
for more information about the load.
Listing 8.18: Eine Datei mit SQL*Loader laden
Total logical records skipped: 0
Total logical records read: 107
Total logical records rejected: 0
Total logical records discarded: 0
Listing 8.19: Anzahl der geladenen Sätze in der Log-Datei
Tipp
Eine häufige Fehlerquelle beim Laden ist das Datumsformat. Als Standard ver-
wendet der SQL*Loader die Einstellung des Oracle Client, unter dem er läuft.
Die Einstellung muss mit dem Format in der csv-Datei übereinstimmen. Für die
Anpassung gibt es mehrere Möglichkeiten. So kann die Umgebungsvariable
NLS_DATE_FORMAT gesetzt werden. Eine andere Option ist, das Format an der
Spalte in der Kontrolldatei mit anzugeben.

Get Oracle 12c - Das umfassende Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.