In alternativa all'eliminazione e alla riaggiunta della colonna è possibile utilizzare lo shrink space
clausola
:
ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);
db<>violino
, che è 18c ma dovrebbe funzionare anche in 11g. (Più tardi:sì, lo fa in 11gR2 con retention none
omesso comunque; A SQL Fiddle non piace però.)
Mi è mancato quel dettaglio, ma funziona ancora; hai solo bisogno di un passaggio in più per trovare la colonna BLOB nascosta che esegue il backup della colonna XMLType, come mostrato qui . Ho fatto la alter
dinamico solo per prenderlo al volo, ma se riesci a trovarlo manualmente, puoi semplicemente inserirlo tu stesso nella dichiarazione ovviamente:
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;
/
Probabilmente vale la pena notare che funziona con basicfile
spazio di archiviazione, come mostrato nella tua demo minima, ma potrebbe non funzionare con securefile
storage - almeno una parte del tempo che genera ORA-10635:tipo di segmento o tablespace non valido.