ORA löschen / kürzen
Ich bin mit SQL-loader zum laden meiner Daten in die Datenbank ein.
Bevor ich die Daten einfügen muss ich entfernen Sie vorhandene Daten in der Tabelle:
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
replace
into table IMPORT_ABC
fields terminated by "," OPTIONALLY ENCLOSED BY '"'
trailing nullcols(
.
.
.
.)
Aber ich bekam eine Fehlermeldung wie:
SQL*LOADER-926: OCI-Fehler beim ausführen von delete/truncate für Tabelle IMPORT_ABC
ORA-30036: nicht verlängern-segment um 8 in der undo-tablespace 'undo1'
Wie kann ich Daten löschen, zum Beispiel von 10000 Zeilen?
Ich weiß, dass ich einige Grenze auf meine DB.
Wenn es nicht, müssen wiederhergestellt werden - vermutlich nicht, wenn Sie sowieso ersetzen - gibt es einen Grund, warum man mit
Nein, ich will einfach nur, um zu löschen Sie alle Elemente aus der Tabelle und dann instert eine neue
replace
statt truncate
?Nein, ich will einfach nur, um zu löschen Sie alle Elemente aus der Tabelle und dann instert eine neue
InformationsquelleAutor 4est | 2013-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löschen von Datensätzen in Chargen getan werden kann in einem PL/SQL-Schleife, aber wird im Allgemeinen als schlechte Praxis, da das gesamte löschen sollte normalerweise betrachtet werden als eine einzelne Transaktion; und das darf nicht sein fertig in SQL*Loader control-Datei. Der DBA sollte die Größe der
UNDO
Platz für die Arbeit, die Sie tun müssen.Wenn Sie das löschen der gesamten Tabelle, die Sie sicherlich besser abschneiden sowieso, entweder in der control-Datei:
Oder als separate
truncate
- Anweisung in SQL*Plus/SQL-Entwickler/einige andere client bevor Sie beginnen, laden:Der Nachteil ist, dass Ihre Tabelle wird angezeigt leer an andere Nutzer, während die neuen Zeilen geladen werden, aber wenn es einen dedizierten Bereich import (erraten aus dem Namen) , kann das eh egal.
Wenn Ihr
UNDO
ist wirklich, dass die kleinen, dann haben Sie möglicherweise mehrere Lasten, die in dem Fall - wohl offensichtlich - Sie brauchen, um stellen Sie sicher, dass Sie nur dietruncate
in der control-Datei für das erste (oder verwenden Sie die separatetruncate
- Anweisung), und habenappend
stattdessen in den nachfolgenden Dateien Steuern, wie Sie darauf hingewiesen in den Kommentaren.Vielleicht wollen Sie auch zu prüfen,externe Tabellen, wenn Sie diese Daten als Basis zum füllen etwas anderes, da es keine
UNDO
Aufwand zum ersetzen der externen Datenquelle. Sie werden wahrscheinlich brauchen, sprechen Sie mit Ihrem DBA über Einstellung, und geben Sie die erforderlichen Verzeichnis-Berechtigungen.ja, das ist es, was ich meinte. Hinzugefügt einen Verweis auf die Antwort; danke.
Thx!!! Es würde funktionieren, aber meine user werden nicht gewährt abschneiden Berechtigungen. Ich habe nur löschen, privs. Jetzt verwende ich eine separate sqlplus Anweisung die Daten zu löschen, und als sqlldr wie oben... Aber ich bin nicht amüsiert...
InformationsquelleAutor Alex Poole
Ihre undo-tablespace zu klein, um alle rückgängig-Informationen und es scheint, es kann nicht verlängert werden.
Teilen Sie dem import in kleinere zusammengefasst und commit nach jeder charge oder Ihr DBA zur Erhöhung der tablespace für undo1
Und verwenden Sie truncate statt ersetzen, bevor Sie die immports
replace
versucht, um alles zu löschen in der Tabelle in der ersten Ausführung, jedoch viele Datensätze eingefügt werden; und die anschließende läuft mit den gleichen parameter würde löschen Sie die Zeilen, die Sie gerade eingefügt. Batchverarbeitung benötigt werden könnten für die insert-phase-obwohl...Stimmt, aber mit truncate sollte das problem lösen
ja, ich habe Daten importieren aufgeteilt in 3 config-Dateien, und es ist ok, aber ich kann nicht entfernen Sie alle Elemente (in DB), indem Sie einmal, irgendwie muss ich Sie löschen, indem Sie 1000rows etc wie kann ich es tun ?
Haben Sie versuchen, truncate ? oder Sie könnten versuchen, löschen nach rowid asktom.oracle.com/pls/apex/...
InformationsquelleAutor Sibster