В Базе Данных версии 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-файл например?
Cуществуют ли такие пакеты Oracle, которые сами высвобождают свободные блоки и
переставляют их опять же в текущий data-файл миную операции переноса объектов в другое место?
P.S. Проблема актуальна для версии Oracle 9i тоже. Если есть какие то наработки очень жду ответа.