Ich versuche mit dem einfachen Befehl "DELETE FROM TABLE_NAME" ein Tabelle
komplett
zu löschen. Dies wird nach einiger Zeit durch folgende Fehlermeldung
abgebrochen:
FEHLER in Zeile 1:
ORA-29876: Routine ODCIINDEXDELETE nicht erfolgreich ausgeführt
ORA-20000: ConText error:
DRG-10602: failed to queue DML change to column TEXT for primary key
AAAA7oAAGAAAG5YAAK
DRG-50857: oracle error in drekqkd(execute k_stmt)
ORA-01562: Fehler beim Erweitern der Rollback-Segmentnummer 2.
ORA-01628: Max. Anzahl von Extents (121) für Rollback-Segment RB0 erreicht
Liegt es vielleicht an der Größe der Tabelle? Die Tabelle hat ca. 50000
Sätze! Für diese Tabelle ist auch ein Index für die Volltextsuche angelegt.
Kann mir jemand weiterhelfen?
Danke im Voraus!!!
André Klos
Wenn du die Tabelle unter Oracle komplett löschen willst dann geht's
schneller einfacher mit einem "TRUNCATE TABLE". Natürlich könnte wie
oben vermerkt im Rollback-Segment kein platz mehr sein; dagegen hilft
nur von vorneherein entsprechend groß auslegen.
Martin
> ORA-01562: Fehler beim Erweitern der Rollback-Segmentnummer 2.
> ORA-01628: Max. Anzahl von Extents (121) für Rollback-Segment RB0 erreicht
>
> Liegt es vielleicht an der Größe der Tabelle? Die Tabelle hat ca. 50000
> Sätze! Für diese Tabelle ist auch ein Index für die Volltextsuche
angelegt.
> Kann mir jemand weiterhelfen?
Also in erster Linie liegt es daran, das er dein Rollback-Segment nicht
erweitern kann (indirekt natürlich dann daran, das die Tabelle "so groß" ist
und er das wohl nicht alles in das bestehende Rollback-Segment reinbekommt).
Was mir so einfallen würde:
1. Geht eventuell ein TRUNCATE?
2. Hat DELETE auch die Möglichkeit ein "NOLOGGING" anzugeben? (Keine Ahnung
ob das was bringt, bin nur neulich in der Doku dran hängengeblieben, und das
verwendet dann wohl kein RBS??)
3. Das RBS erweitern
4. Zum löschen ein neues RBS anlegen, dieses dann "festlegen" (ALTER
SESSION?)
Aber morgen früh sind bestimmt wieder Leute hier die die Oracle-Doku besser
auswendig können und intensiver SQL benutzen :-)
Nico
Als einfachste Lösung würde ich vorschlagen dass Du nur so
viele Sätze in einer Transaktion löschst, dass das Rollbacksegment
nicht überläuft.
Mit DELETE FROM TABLE_NAME WHERE ROWNUM < 1001
werden beispielsweise 1000 Sätze gelöscht.
Mit einem anschliessenden COMMIT wird die Aktion in die
DB geschrieben und das kannst du dann beliebig oft wiederholen.
Alternativ könnte man auch die maximalen Extents für das
Rollbacksegment erhöhen.
Gruss Torsten
> trancate tabel tabellenname;
^^^^^^^^^^^^^^
soll sicher 'truncate table' heissen. :-)
--
Jens Kubieziel
"Torsten Kuphal" <torsten...@addcom.de> schrieb im Newsbeitrag
news:9s6nsn$11mv72$1...@ID-95069.news.dfncis.de...
Gruss Torsten
TRUNCATE hat gefunzt!!!
Gruss
André