я пользуюсь методом двойного переноса
создать ТС для временных нужд
Код:
alter table <таблицы из исходного ТС> move tablespace <временное ТС>;
alter table <таблицы из временного ТС> move tablespace <исходное ТС>;
между этими переносами, в зависимости от ситуации, работы над исходным ТС (изменения размеров, параметров хранения, перераспределение по дискам)
после этого полная переиндексация, тоже обычно в другое ТС, чтобы и индексы ровненько лежали
Насколько знаю optimizer от Олега умеет собирать свободное место и дефрагментировать данные