Сжатие LOB-сегментов не освобождает пространство

Пытаюсь сжать долевые сегменты:

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');

Как сжать лоб-сегменты, чтобы освободить место?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
1 408
3

Ответы 3

Попробуй это -

ALTER TABLE <table_name> MODIFY LOB (<lob_column>) (SHRINK SPACE);

У меня ошибка: ORA-10635: неверный тип сегмента или табличного пространства

Jdzel 23.04.2018 19:41

Какую версию Oracle вы пробуете? .... Это должно работать на Oracle 10g R2 и более поздних версиях.

shrek 23.04.2018 19:59

Я использую Oracle 11g

Jdzel 24.04.2018 10:10

Выполните это: ALTER TABLE «MA_USER». «TEST_CLOB_COMPRESS3» ИЗМЕНИТЬ LOB (RTDM_RESPONSE_XML) (SHRINK SPACE CASCADE); Но есть такие же байты

Jdzel 24.04.2018 13:15

В качестве решения проблемы вы можете попытаться использовать предложение 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), который не использовал свободное место.

Другие вопросы по теме