@ Dave ответ об экспорте и импорте правильный и лучший выбор для освобождения места.
Также в Oracle нет команды сжатия, @ Dave прав, но существует команда изменения размера, которая, как @ Дэвид сказал: «Файлы данных можно изменить до последнего использованного блока», НО Следует отметить, что свободные блоки в файле данных могут быть распределены следующим образом
0101000001111000000000000000000001110000000000
|---------
, где:
0-это свободный блок
1-й блок
изменяя размер файла данных до последнего использованного блока, он будет выглядеть так:
010100000111100000000000000000000111
|---------
Но как насчет других свободных блоков в файле данных? Они недоступны для других файлов данных или самой системы.
Если файл данных был таким:
1111111111111100000000000000000
тогда изменение размера будет полезно, но не в предыдущем варианте.
В любом случае, чтобы определить, до какого размера вы можете изменить размер файла данных, вот скрипт:
select 'alter database '||a.name||' datafile '''||b.file_name||'''' ||
' resize '||greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free))||chr(10)||
'--tablespace was '||trunc(bytes_full*100/bytes_total)||
'% full now '||
trunc(bytes_full*100/greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free)))||'%'
from v$database a
,dba_data_files b
,(Select tablespace_name,sum(bytes) bytes_full
From dba_extents
Group by tablespace_name) c
,(Select tablespace_name,sum(bytes) bytes_total
From dba_data_files
Group by tablespace_name) d
,(Select a.tablespace_name,a.file_id,b.bytes bytes_free
From (select tablespace_name,file_id
,max(block_id) max_data_block_id
from dba_extents
group by tablespace_name,file_id) a
,dba_free_space b
where a.tablespace_name = b.tablespace_name
and a.file_id = b.file_id
and b.block_id > a.max_data_block_id) e
Where b.tablespace_name = c.tablespace_name
And b.tablespace_name = d.tablespace_name
And bytes_full/bytes_total < .7
And b.tablespace_name = e.tablespace_name
And b.file_id = e.file_id
Не беспокойтесь, этот скрипт не будет вырезать использованные блоки из файла данных.