которой поля blob/clob?
ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT ALTER TABLE TABLE_NAME SHRINK SPACE CASCADE
Так пробовал... не чистит
Ну конечно, потому что таким образом Вы выполняете MOVE только для таблицы, но не для LOB сегмента. Вам нужен немного другой синтаксис, вроде такого: ALTER TABLE lob_tab MODIFY LOB(data) (SHRINK SPACE CASCADE); Ну и почитайте заметку с объяснением что к чему и почему, напрмер эту: https://oracle-base.com/articles/misc/alter-table-shrink-space-online
Спасибо... ссыль посмотрю, но этот способ тоже не чистит.
Версия какая? Там до 19 (или даже 21) был баг, что хотя поле создавалось как BASIC, скрытый параметр все прописывал как SecureFile, а с ним Modify lob shrink не работал 😞
Ну как уже упоминалось в соседних сообщениях, разберитесь со способом хранения Ваших LOB сегментов - BASICFILE или SECUREFILE. И второе - тут же технический канал, мы тут "не верим" заявлениям "не чистится". Приведите логи сессии, где видно значение DBA_SEGMENTS.BYTES для таблицы и для LOB сегмента до, потом команды что Вы выполнили, их результат (полезно включить set timing on), и результаты с размерами сегментов из словаря после. А ещё лучше выложите куда-то на dbfiddle.uk простенький тест, где Вы создаете табличку с парой полей и LOB сегментом, наполняете её тестовыми данными из DBMS_RANDOM (скажем миллион строк), потом удаляете половину и пытаетесь сжать таблицу / LOB сегмент с помощью MOVE. Тут все сидят с открытыми коннектами к базам, и тут же могут воспроизвести Ваш пример на своих системах, на разных версиях и архитектурах Oracle DB. Эта рекомендация не только к Вашему вопросу относится, но вообще ко всем, кто просит аудиторию что-то проверить или помочь. Описанный выше подход к задаванию вопросов по-моему оптимальный и позволяет любому у кого есть несколько минут быстро воспроизвести пример и проблему - и предложить вариант решения.
Обсуждают сегодня