Nachtrag am 19.10.2010: inzwischen muss ich von der hier vorgestellten Operation abraten, da sie einen recht häßlichen Bug auf den Plan rufen kann.
In Oracle 10g können Tabellen über ein ALTER TABLE ... SHRINK im laufenden Betrieb reorganisiert und verkleinert werden. Durch die CASCADE-Option werden auch abhängige Objekte wie Indizes und LOBs verkleinert. Voraussetzung für den Einsatz dieses Features ist ein Tablespace, für den ASSM (Automatic Segment Space Management) aktiviert ist (das ist bei uns und per default der Fall), außerdem muss für die entsprechende Tabelle das <row movement> aktiviert werden, so dass die physikalische Adresse der Einträge geändert werden kann:
select segment_name , bytes from user_segments where segment_name IN (select segment_name from user_lobs where table_name = 'SIMPLENODECONTENT') or segment_name = 'SIMPLENODECONTENT'; SEGMENT_NAME BYTES ------------------------------ ---------- SYS_LOB0000109571C00002$$ 855638016 SIMPLENODECONTENT 7340032 alter table simplenodecontent enable row movement; Tabelle wurde geändert. -- diese Operation kann längere Zeit in Anspruch nehmen: alter table simplenodecontent shrink space cascade; Tabelle wurde geändert. Abgelaufen: 00:02:34.96 alter table simplenodecontent disable row movement; Tabelle wurde geändert. select segment_name , bytes from user_segments where segment_name IN (select segment_name from user_lobs where table_name = 'SIMPLENODECONTENT') or segment_name = 'SIMPLENODECONTENT'; SEGMENT_NAME BYTES ------------------------------ ---------- SYS_LOB0000109571C00002$$ 158466048 SIMPLENODECONTENT 1769472