Звільнення місця в data-файлі

В Базі Даних версії 8i, після виконання різного роду DML операцій над об'єктами data-файл
даних ставати великого розміру, не вистачає місце на жорсткому диску.
Отже, виникає бажання зменшити його.
Наприклад таким чином:

alter database datafile '/ oracle / oradata / kaztes /users01.dbf' resize 1000M

Oracle соответвенно видає помилку:

ORA-03297. file contains used data beyond requested RESIZE value

В Enterprise Manager Console Oracle показує у даній data-файлу,
що він має вільний простір dba_free_space показує що
місця в цьому файлі дуже мало. Можна подивитися звичайно що
знаходиться нагорі файлу приблизно таким ось чином:

select file_name, segment_name, segment_type, owner from dba_extents s,

(Select max (block_id) maxblock, file_id from dba_extents group by file_id) b,

dba_data_files f where

s.block_id = b.maxblock and s.file_id = b.file_id and f.file_id = s.file_id

order by file_name

-- Мною Знайдено в інтернеті.
Цей скрипт показує, які об'єкти займають останні екстенти файлу.
Тепер питання що з ними робити. Логічно перенести їх куди небудь в інше
місце і спробувати заново зменшити розмір дата файлу. Тобто якщо це індекс,
то потрібно перебудовувати його в інше табличний простір в інший data-файл наприклад?
Існують такі пакети Oracle, які самі вивільняють вільні блоки і
переставляють їх знову ж в поточний data-файл мину операції перенесення об'єктів в інше місце?
P.S. Проблема актуальна для версії Oracle 9i теж. Якщо є якісь напрацювання дуже чекаю відповіді.

Схожі статті