URL: https://it.desy.de/dienste/datenbanken/oracle/programmierschnittstellen/sqlloader/index_ger.html
Breadcrumb Navigation
SQL*Loader
SQL*Loader kann genutzt werden, um Dateien in die Datenbank zu laden. Dazu ist es nützlich, wenn diese Dateien eine Struktur besitzen und dass der SQL*Loader auch zur Verfügung steht ;-).
SQL*Loader Client-Programm
Der SQL*Loader ist im Oracle-Client zu finden, d.h. nicht im Instant-Client:
- SL5:
/opt/products/oracle-client/10.2g
- Windows: typischerweise in
C:\ORACLE\product\10.2.0\client_1
via NetInstall
Erforderliche Komponenten für SQL*Loader
Um strukturierte Daten zu laden, sind einige Komponenten erforderlich:
- Informationen, wie die Datenbank zu erreichen ist
- die Daten
- eine Control-Datei, die sagt, wie die Daten geladen werden
Die Daten
Die Daten liegen am einfachsten als CSV-Datei vor. Es geht auch anders, dann wird die Control-Date ggf. komplizierter. Es sind sogar Binärdaten (Bilder etc.) per SQL*Loader ladbar.
Eine Beispielzeile:
{948F2889-3119-44E0-9409-2E980A1E5292},0,0,NULL,"mailrptr","mailrptr (owner: Jahnke-Zumbusch, Dirk)","ADXV1","ADXV1_SG1","V1_SG1_DB1",0,"WIN\sys_djz",20100331104528,0,2010-09-21
Die Controldatei
Passend zur obigen Zeile die Controldatei mit einigen Angaben für den Ladevorgang zu Beginn:
Anfangs zu sehen:
LOAD DAT
A
hier geht's losINFILE 'D:\temp\exchange-mailboxusage-load.data'
hier stehen die Daten drin (ginge auch inline)BADFILE 'D:\temp\exchange-mailboxusage-load-bad.txt'
falsch formatierte oder abgelehnte Datensätze stehen hinterher hierDISCARDFILE 'D:\temp\exchange-mailboxusage-load-discard.txt'
alle Datensätze, die nicht fehlerhaft sind oder abgelehnt wurdenAPPEND INTO TABLE MAILRPTW.T_X2003_MAILBOXUSAGE_BY_DATE
in diese Tabelle gehen die Daten;APPEND
=> die Tabelle wird vorher nicht genullt, wichtig!- und so sind sie im Ursprungsfile formatiert:
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
GUID ,
ASSOCCONTENTCOUNT,
DELETEDMESSAGESIZEEXTENDED,
LASTLOGOFFTIME DATE "YYYYMMDDHH24MISS" NULLIF LASTLOGOFFTIME='NULL',
LEGACYDN ,
MAILBOXDISPLAYNAME ,
SERVERNAME ,
STORAGEGROUPNAME ,
STORENAME ,
TOTALITEMS ,
LASTLOGGEDONUSERACCOUNT ,
LASTLOGONTIME DATE "YYYYMMDDHH24MISS" NULLIF LASTLOGONTIME='NULL',
MAILBOXSIZE ,
TSTAMP DATE "YYYY-MM-DD"
)
Und hier wg. copy & paste ohne Kommentare:
LOAD DATA
INFILE 'D:\temp\exchange-mailboxusage-load.data'
BADFILE 'D:\temp\exchange-mailboxusage-load-bad.txt'
DISCARDFILE 'D:\temp\exchange-mailboxusage-load-discard.txt'
APPEND INTO TABLE MAILRPTW.T_X2003_MAILBOXUSAGE_BY_DATE
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
GUID ,
ASSOCCONTENTCOUNT,
DELETEDMESSAGESIZEEXTENDED,
LASTLOGOFFTIME DATE "YYYYMMDDHH24MISS" NULLIF LASTLOGOFFTIME='NULL',
LEGACYDN ,
MAILBOXDISPLAYNAME ,
SERVERNAME ,
STORAGEGROUPNAME ,
STORENAME ,
TOTALITEMS ,
LASTLOGGEDONUSERACCOUNT ,
LASTLOGONTIME DATE "YYYYMMDDHH24MISS" NULLIF LASTLOGONTIME='NULL',
MAILBOXSIZE ,
TSTAMP DATE "YYYY-MM-DD"
)
Aufruf von SQL*Loader
Windows
$ORACLE_HOME\bin\sqlldr control=MY.CTL SILENT=ALL USERID=USERNAME/PASSWD@desy.desy.de LOG=LOGFILE.TXT
Linux/UNIX
dito, halt / statt \ oder sqlldr
ist im Pfad...
Und nicht vergessen, die log, bad und discard Dateien zu filtern/"grep"en auf Fehler etc.