Script to shrink segments:
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' shrink space compact;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' shrink space;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' modify partition '
||PARTITION_NAME
||' SHRINK SPACE;' sql1
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM dba_tab_subpartitions
WHERE tablespace_name IN ('USERS')
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' modify subpartition '
||SUBPARTITION_NAME
||' SHRINK SPACE;' sql1
FROM dba_tab_subpartitions
WHERE tablespace_name IN ('USERS')
UNION
SELECT 'alter table '
||owner
||'.'
||table_name
||' modify lob('
||column_name
||') (shrink space);' sql1
FROM dba_lobs
WHERE TABLESPACE_NAME IN ('USERS')
AND PARTITIONED ='NO'
UNION
SELECT 'ALTER TABLE '
||TABLE_OWNER
||'."'
|| TABLE_NAME
|| '" MOVE SUBPARTITION '
|| SUBPARTITION_NAME
||' TABLESPACE '
||TABLESPACE_NAME
||' LOB ('
||COLUMN_NAME
||') STORE AS (TABLESPACE '
||TABLESPACE_NAME
||');'
FROM DBA_LOB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
union
SELECT 'ALTER TABLE '
||TABLE_OWNER
||'."'
|| TABLE_NAME
|| '" MOVE PARTITION '
|| PARTITION_NAME
||' TABLESPACE '
||TABLESPACE_NAME
||' LOB ('
||COLUMN_NAME
||') STORE AS (TABLESPACE '
||TABLESPACE_NAME
||');'
FROM DBA_LOB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION
SELECT 'ALTER INDEX '
||INDEX_OWNER
||'.'
|| INDEX_NAME
||' rebuild partition '
|| PARTITION_NAME
||' online;' sql1
FROM DBA_IND_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'ALTER INDEX '
||INDEX_OWNER
||'.'
|| INDEX_NAME
||' rebuild subpartition '
|| SUBPARTITION_NAME
||' online;' sql1
FROM DBA_IND_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION
SELECT 'ALTER INDEX '
||OWNER
||'.'
|| INDEX_NAME
||' rebuild online;' sql1
FROM DBA_INDEXES
WHERE TABLESPACE_NAME IN ('USERS')
AND PARTITIONED ='NO' ;
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' shrink space compact;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||OWNER
||'.'
||TABLE_NAME
||' shrink space;' sql1
FROM DBA_TABLES
WHERE TABLESPACE_NAME IN ('USERS')
AND TABLE_NAME NOT IN
(SELECT TABLE_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION ALL
SELECT TABLE_NAME
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
)
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' modify partition '
||PARTITION_NAME
||' SHRINK SPACE;' sql1
FROM DBA_TAB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' enable row movement;' sql1
FROM dba_tab_subpartitions
WHERE tablespace_name IN ('USERS')
UNION
SELECT 'alter table '
||TABLE_OWNER
||'.'
||TABLE_NAME
||' modify subpartition '
||SUBPARTITION_NAME
||' SHRINK SPACE;' sql1
FROM dba_tab_subpartitions
WHERE tablespace_name IN ('USERS')
UNION
SELECT 'alter table '
||owner
||'.'
||table_name
||' modify lob('
||column_name
||') (shrink space);' sql1
FROM dba_lobs
WHERE TABLESPACE_NAME IN ('USERS')
AND PARTITIONED ='NO'
UNION
SELECT 'ALTER TABLE '
||TABLE_OWNER
||'."'
|| TABLE_NAME
|| '" MOVE SUBPARTITION '
|| SUBPARTITION_NAME
||' TABLESPACE '
||TABLESPACE_NAME
||' LOB ('
||COLUMN_NAME
||') STORE AS (TABLESPACE '
||TABLESPACE_NAME
||');'
FROM DBA_LOB_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
union
SELECT 'ALTER TABLE '
||TABLE_OWNER
||'."'
|| TABLE_NAME
|| '" MOVE PARTITION '
|| PARTITION_NAME
||' TABLESPACE '
||TABLESPACE_NAME
||' LOB ('
||COLUMN_NAME
||') STORE AS (TABLESPACE '
||TABLESPACE_NAME
||');'
FROM DBA_LOB_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION
SELECT 'ALTER INDEX '
||INDEX_OWNER
||'.'
|| INDEX_NAME
||' rebuild partition '
|| PARTITION_NAME
||' online;' sql1
FROM DBA_IND_PARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
AND SUBPARTITION_COUNT =0
UNION
SELECT 'ALTER INDEX '
||INDEX_OWNER
||'.'
|| INDEX_NAME
||' rebuild subpartition '
|| SUBPARTITION_NAME
||' online;' sql1
FROM DBA_IND_SUBPARTITIONS
WHERE TABLESPACE_NAME IN ('USERS')
UNION
SELECT 'ALTER INDEX '
||OWNER
||'.'
|| INDEX_NAME
||' rebuild online;' sql1
FROM DBA_INDEXES
WHERE TABLESPACE_NAME IN ('USERS')
AND PARTITIONED ='NO' ;