sql >> Database teknologi >  >> RDS >> Oracle

Hvordan slipper man af med den tomme, men enorme LOB-søjle?

Som et alternativ til at slette og tilføje kolonnen igen kan du bruge shrink space klausul :

ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);
 

db<>violin , som er 18c, men burde også fungere i 11g. (Senere:ja, det gør det i 11gR2 med retention none alligevel udeladt; SQL Fiddle kan dog ikke lide det.)

Savnede den detalje, men den virker stadig; du skal bare bruge et ekstra trin for at finde den skjulte BLOB-kolonne, der sikkerhedskopierer XMLType-kolonnen, som vist her . Jeg har lavet alter dynamisk bare for at samle det op med det samme, men hvis du kan finde det manuelt, kan du selvfølgelig bare selv tilslutte det til erklæringen:

DECLARE l_name USER_TAB_COLUMNS.COLUMN_NAME%TYPE; l_stmt VARCHAR2(100); BEGIN select column_name into l_name from user_tab_cols where table_name = 'T' and hidden_column = 'YES' and column_id = ( select column_id from user_tab_cols where table_name = 'T' and column_name = 'X' ); l_stmt := 'ALTER TABLE t MODIFY LOB ("' || l_name || '") (SHRINK SPACE)'; dbms_output.put_line(l_stmt); execute immediate l_stmt; END; /

db<>violin

Sandsynligvis værd at bemærke, at dette virker med basicfile storage, som vist i din minimale demo, men fungerer muligvis ikke med securefile storage - i det mindste noget af tiden, der kaster ORA-10635:Ugyldigt segment eller tablespace-type.




  1. Hvorfor viser COUNT() kun en tabelrække?

  2. Reparation af kodninger

  3. Dynamisk forespørgsel med HibernateCritera API &Oracle - ydeevne

  4. Tidsstempelforskel i timer for PostgreSQL