Пытаюсь сжать долевые сегменты:
ALTER TABLE "MA_USER"."TEST_CLOB_COMPRESS3" MODIFY
LOB("RTDM_RESPONSE_XML") (
compress high
);
но этот запрос сообщает, что столбец «байты» имеет то же значение:
select S.BYTES/1024/1024/1024,S.* from dba_segments S where segment_name in (select segment_name from dba_lobs where lower(TABLE_NAME) = 'test_clob_compress3');
Как сжать лоб-сегменты, чтобы освободить место?


Попробуй это -
ALTER TABLE <table_name> MODIFY LOB (<lob_column>) (SHRINK SPACE);
Какую версию Oracle вы пробуете? .... Это должно работать на Oracle 10g R2 и более поздних версиях.
Я использую Oracle 11g
Выполните это: ALTER TABLE «MA_USER». «TEST_CLOB_COMPRESS3» ИЗМЕНИТЬ LOB (RTDM_RESPONSE_XML) (SHRINK SPACE CASCADE); Но есть такие же байты
В качестве решения проблемы вы можете попытаться использовать предложение MOVE (т.е. не изменять) для команды ALTER TABLE в столбце LOB с указанной степенью сжатия, выполняя следующие действия:
ALTER TABLE table_name MOVE lob(lob_column_name) STORE AS SECUREFILE ( DISABLE storage in row TABLESPACE tablespace_name COMPRESS HIGH CACHE )
Потому что простая модификация LOB с помощью сжатия увеличивает его пространство в 2 раза:
alter table contracts_sec modify lob(orig_file) (compress HIGH)
Согласно https://oracle-base.com/articles/misc/alter-table-shrink-space-online правильное решение для сокращения сегментов LOB безопасного файла следующее:
ALTER TABLE TABLE_NAME MOVE LOB (LOB_COLUMN_NAME) STORE AS (NOCOMPRESS);
В моем случае это действительно помогло, в отличие от ALTER TABLE TABLE_NAME MODIFY LOB (LOB_COLUMN_NAME) (SHRINK SPACE CASCADE), который не использовал свободное место.
У меня ошибка: ORA-10635: неверный тип сегмента или табличного пространства