Daten, die nicht immer besiedelt von sql loader
Ich habe eine control-Datei, die loader.ctl, in C:\oracle\product\10.2.0\oradata\orcl
.
Inhalt des loaders.ctl-Datei ist
load data
infile 'd:\mydata\test.csv'
into table emp1
fields terminated by "," optionally enclosed by '"'
( empno, ename,job,mgr,hiredate,sal,comm,deptno )
emp1
Tabelle bereits in der Datenbank vorhanden und gibt es 9 Einträge in den test.csv -
Ich ausgeführt loader.ctl aus sqlldr:
Nun, wenn ich meine Datenbank finde ich keine Einträge in emp1
... warum ist das so? Nach dem commit warum werden die Daten nicht aufgefüllt, die in der Tabelle?
Habe SQLLoader anzuzeigen, dass es geladen 9 Zeilen? Wenn es Tat, ich würde Wetten, dass du die Abfrage einer anderen Tabelle als SQLLoader geladen, die Daten in (entweder eine andere Datenbank oder ein anderes schema in der gleichen Datenbank, zum Beispiel)
Sie sehen im Bild im Anhang ,es gibt eine commit-Punkt erreicht erreicht .... und ich bin Sie sich bei scott/tiger und wie finde ich meine aktuelle schema
Ich bin nicht zu sehen, ein Bild. Aber das ist vielleicht ein firewall-Problem. Wenn Sie sich einloggen über den
scott/tiger@orcl control=loader.ctl. ....dies ist, was ich m ausführen bekomme ich einen commit mit 9-Datensätze ,aber keine Daten in der emp1-Tabelle wenn Sie angemeldet thru scott
Sie sehen im Bild im Anhang ,es gibt eine commit-Punkt erreicht erreicht .... und ich bin Sie sich bei scott/tiger und wie finde ich meine aktuelle schema
Ich bin nicht zu sehen, ein Bild. Aber das ist vielleicht ein firewall-Problem. Wenn Sie sich einloggen über den
SCOTT
Benutzer, das schema wird die SCOTT
schema, sofern Sie nicht ausdrücklich ändern Sie es mit einem ALTER SESSION SET current_schema
nach der Anmeldung. Sind Sie sicher, dass Sie versuchen eine Verbindung zu derselben Datenbank, SQL*Loader zum laden von Daten in?scott/tiger@orcl control=loader.ctl. ....dies ist, was ich m ausführen bekomme ich einen commit mit 9-Datensätze ,aber keine Daten in der emp1-Tabelle wenn Sie angemeldet thru scott
InformationsquelleAutor Gaurav Soni | 2012-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens ist Sie noch nicht angegeben, eine log-Datei, die bedeutet, dass es wahrscheinlich an der gleichen Stelle als Ihre ctl-Datei, aber es könnte auch sein, Sie in das Verzeichnis namens SQL*Loader oder das Verzeichnis, die Daten in - als beiseite, es ist eine gute Idee, aufrufen von SQL*Loader von der gleichen Stelle, speichern Sie die ctl-Datei, um Verwirrung zu vermeiden. Suche ihn und das dazugehörige schlechte Datei.
Würde ich immer explizit den Speicherort der Protokolldatei und der bad - und Ausschuss-Datei-wenn angemessen - entweder in der Befehlszeile oder in der ctl-Datei. Ich bevorzuge die Kommandozeile, so können Sie Sie alle in verschiedene Ordner, sodass Sie sich nicht gegenseitig überschreiben. So dass Sie nicht haben, ändern Sie die ctl-Datei jedes mal, wenn Sie etwas laden können Sie auch legen Sie die Daten-Datei (und fast alles andere) in die Befehlszeile ein. So etwas wie dieses:
Gibt es zwei mögliche Gründe für Ihr problem.
Als @JustinCave vorgeschlagen, du bist einfach eine Auswahl aus der falschen Tabelle. Wir setzen diese beiseite für jetzt.
Sie haben angegeben, dass Sie erreicht haben, eine commit-Punkt, so sollte es sein, Daten in der Tabelle. Dies ist nicht bei allen der Fall. Sie haben erreicht, eine commit-Punkt, sondern, entsprechend Ihrer gebuchten ctl-Datei, die Sie noch nicht angegeben, die Anzahl von Fehlern erlaubt. Dies bedeutet, dass SQL*Loader ist mit dem Standard - 50. Es ist möglich, erreichen eine commit-Punkt, wo alles geladen wird, bevor es ist, Fehler; d.h. Sie Begehen nichts.
Punkt 2 ist die wahrscheinlichste Ursache für Ihr problem. Suchen Sie in der log-Datei und es sollte Ihnen sagen, in einer nicht unbedingt sehr hilfreich, warum haben Sie Fehler. Die bad-Datei enthält alle Daten, die noch nicht geladen wurden, die Sie überprüfen können, gegen das Protokoll.
Es gibt durchaus ein paar Gründe für das zweite auftreten, so ist hier eine Liste der Dinge, die schief gehen können mit SQL*Loader:
TRAILING NULLCOLS
.hiredate
, die würden sichhiredate "to_date(:hiredate,'yyyy/mm/dd')"
in der ctl-Datei, woyyyy/mm/dd
geändert beliebiges Datum-format, die Sie benötigen. Sehen hier für eine gute Liste. Natürlich können Sie immer ändern Sie in dieser Spalte auf einen char und befassen sich mit der transformation später.to_number
Funktion:sal "to_number(:sal,'999.99')"
. Wie bei Terminen können Sie immer ändern Sie in dieser Spalte auf einen char und befassen sich mit der transformation später.deptno
zudeptno terminated by whitespace
.sal integer external
, der explizit sagt, SQL*Loader, es ist eine Reihe..txt
zu.exe
jemand? )characterset
option.Aus der Spitze von meinem Kopf, die meisten von dem, was schief gehen könnte mit einer Ladung so einfach wie bei Ihnen.
Nun die Beratung. Angeben. Es ist einfach so. Wenn Sie nicht profitieren Sie von den extrem mächtigen Natur von SQL*Loader und die unzähligen Möglichkeiten, die Sie bietet, stoßen Sie auf Probleme wie diese. Nicht nur, dass, wenn ein Lieferant etwas ändert, ohne dass Sie Sie sind weniger wahrscheinlich zu bemerken die Veränderung.
Ich würde auch sehr empfehlen IMMER überprüfung der log-Datei nach einem laden. Normalerweise ist dies eine der nur Möglichkeiten zu prüfen, dass Ihr laden erfolgreich war. SQL*Loader schlägt im hintergrund fehl, auf fast jeder Fehler in bar
ORA-01653
- nicht genug Speicherplatz und stellt alle Informationen über diese Fehler in der log-Datei. Sie werden nicht wissen, über Sie, es sei denn Sie überprüfen.Ein typischer ctl-Datei, die normalerweise würde etwa so Aussehen:
All diese Dinge, die, bar die Spaltennamen und den Tabellennamen sind optional.
Diejenigen, die ich Hinzugefügt habe sind:
skip
- Anzahl der Zeilen am oberen Rand überspringen.errors
- Die maximale Anzahl von Fehlern, bevor Sie zu stoppen.rows
- Die Anzahl von Zeilen zu laden, bevor Sie zu Begehen.direct
- Die Verwendung von direct path load.TRUNCATE
- Kürzen Sie die Tabelle vor dem ladenTRAILING NULLCOLS
- Es sind null-Spalten am Ende der Datei."to_date(..."
- Geben Sie einen Oracle-Funktion aufrufen, wenn das laden dieser Spalteinteger external
- Kraft dieser Spalte in eine Zahl, dem Datentyp.terminated by whitespace
- Entfernen von Leerzeichen am Ende der Zeile oder Spalte.Gibt es viel mehr.
Hier sind ein paar links, die großen sind für die weitere Lektüre und eine Erklärung aller möglichen Optionen zur Verfügung:
http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_params.htm
http://www.orafaq.com/wiki/SQL*Loader_FAQ
http://www.oracleutilities.com/OSUtil/sqlldr.html
InformationsquelleAutor Ben