ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

テーブル使用量を縮小するスクリプト

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;