質問: Oracleのビュー、DBA_FREE_SPACEの見方を教えてください。 手持ちのデータベースで、エクステントが発生しているものがあり、気になったのでこれを再構築しようと思いました。 手順としては、 1.現状のデータベースをエクスポート(FULL,COMPRESS=Y) 2.テーブル、インデックスを全てドロップ 3.テーブルスペースをドロップ 4.テーブルスペースを再構築 (容量は余裕があったので、初期に作成時と同じスクリプトで) (既存のデータファイルは消さずにreuseオプションを指定) 5.テーブル、インデックスをINITIAL EXTENTSを現状の容量より上の値に調整。 6.テーブル・インデックスの再作成 7.データのインポート 8.全オブジェクトの再コンパイル の順に実施しました。 作業後、DBA_SEGMENTSより全テーブル・インデックス にextentが発生していない状態になったことは確認できたのすが、 DBA_FREE_SPACEを見ると、テーブルスペースがあたかも二つに分割されて使われているように 表示がされました。(下記参照) SQL> select * from dba_free_space where tablespace_name ='TB1' TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO --------------- ------- -------- ----- ------ ------------ TB1 9 12981 40960 5 9 TB1 9 13001 103219200 12600 9 この状態による悪影響としてはどのようなものがありますか? また、この状態を解消する方法があれば教えてください。 (CREATE TABLESPACEを"reuse"でやったのがまずかったのでしょうか?) 環境は Oracle8.0.6.0.0(Solaris) Oracle8.1.6.2.0(Solaris) の2点で同様の現象を確認しています。 以上、よろしくお願いします。
回答: こんにちは。 分かる範囲内で・・・ >この状態による悪影響としてはどのようなものがありますか? 単純に言えば、40K以下のテーブルを作る時にしか、小さい空き部分を使う可能性がない と言う弊害があります。 あくまで可能性なので小さい空き部分が使用されるとは言い切れません。 >また、この状態を解消する方法があれば教えてください。 解消されるかどうかは分かりませんが、以下のコマンドで空き領域を連続する空き領域に することが出来ます。(Oracle 8からの新機能) SQL> ALTER TABLESPACE テーブルスペース名 COALESCE; 空き領域が物理的に連続していれば、このコマンドで1つに統合されるはずです。 お答えできるのは、これくらいです。