よく忘れるので。
IMP、全テーブルDROP、同じテーブルをIMP・・・
を繰り返していると40MB程度のDMPのはずなのに、表領域が14GB・・・
そんなときに実行するSQL
動的SQL.sample
--SELECT 'TRUNCATE TABLE ' || table_name || ';' ,table_name FROM USER_ALL_TABLES
--order by table_name
declare
tname varchar2(512);
ssql varchar2(512);
begin
for rec in (SELECT SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1024/1024 "MB"
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE LIKE '%TABLE%' --テーブルで実施したらINDEXもSHRINKされた
having SUM(BYTES)/1024/1024 > 5
GROUP BY SEGMENT_NAME, SEGMENT_TYPE
order by 3 desc) loop
ssql := 'ALTER TABLE ' || rec.SEGMENT_NAME || ' ENABLE ROW MOVEMENT';
EXECUTE IMMEDIATE ssql;
ssql := 'ALTER TABLE ' || rec.SEGMENT_NAME || ' SHRINK SPACE CASCADE';
EXECUTE IMMEDIATE ssql;
ssql := 'ALTER TABLE ' || rec.SEGMENT_NAME || ' DISABLE ROW MOVEMENT';
EXECUTE IMMEDIATE ssql;
end loop;
end ;
/