shrink space

大量のDELETEを走らせたのに表領域が解放されない場合は

ALTER TABLE テーブル名 SHRINK SPACE;

で10gからは postgresのバキューム的なことが出来ます。
ただしテーブルの行が移動してもよいということをテーブル単位で指定しないとエラーが発生します。

ALTER TABLE テーブル名 ENABLE ROW MOVEMENT ;

試した結果、DELETEで削除された領域の予想バイト位は解放されてました。
ちなみに、9iまでだとテーブルDROPしてIMPORTし直す必要があるそうです。

毎日同じテーブルに対してDELETE、INSERTとかしてると歯抜け状態になりやすいと思われます。
Transactionテーブルであれば DELETE、INSERTではなくTRUNCATE、INSERT出来るように
うまくPARTITIONINGしておくことが肝心です。
PATITIONは、通常テーブルからでも変更可能ですので是非使うようにしてください。

ただしPARTITIONはOracleEEで、さらにOPTIONでお金がかかりますのでその辺も留意しつつ
PARTITION化出来ない場合はテーブルを年月単位とかで作成すると良いと思います。


明日はOracleOpenworldだ!!
有楽町へ。。。