テーブル使用量を縮小するスクリプト
TABLEの割り当てサイズと最大水位標を最小に戻す
前提条件:全てのテーブルは行移動無効がデフォルトである
declare C_SCHEMA constant varchar2(10) := 'ORCL'; W_TBL_NM varchar2(20); cursor CUR1 is select TABLE_NAME from user_tables; --ログインユーザーが所有するテーブルリスト begin open CUR1; loop fetch CUR1 into W_TBL_NM; exit when CUR1%notfound; dbms_output.put_line(W_TBL_NM || ' SHRINK SPACE ...'); --テーブルの行移動を有効化 execute immediate 'alter table ' || W_TBL_NM || ' enable row movement'; --テーブルの縮小/開放 execute immediate 'alter table ' || W_TBL_NM || ' shrink space'; --テーブルの行移動を無効化 execute immediate 'alter table ' || W_TBL_NM || ' disable row movement'; --統計情報の再取得 exec dbms_stats.gather_table_stats(C_SCHEMA, W_TBL_NM); end loop; close CUR1; exception when others then close CUR1; end;