web-dev-qa-db-ja.com

Oracleのデータファイルから未使用のスペースを再利用する

Tablespace                        Used MB    Free MB   Total MB
------------------------------ ---------- ---------- ----------

 DATA_S1                               686        295        981

DATA_S1という名前のテーブルスペースがあり、1つのデータファイルが含まれています。データファイルの約300Mのスペースが使用されていないことがわかります。データファイルを200M縮小しようとすると:

alter tablespace TABLESPACE_NAME datafile 'DATAFILE_NAME' resize 800M;

それは与えます:

ORA-03297: file contains used data beyond requested RESIZE value.

とにかく私はデータファイルからスペースを取り戻すことができますか

1
user1

サイズを変更する前に、データファイルの断片化を削除する必要があります。つまり、すべてのセグメント(そのテーブルスペースの各オブジェクトに割り当てられたブロックのセット)は、dbブロック内のすべての行をまとめる必要があります。

これにはいくつかのオプションがあります:

11gR2を使用している場合は、

ALTER TABLESPACE <TABLESPACE_NAME> SHRINK SPACE KEEP 700M;

これにより、断片化が解消され、関連するデータファイルが縮小されます。さらに、HWMが可能な限り「最も低い」位置に設定されます。

[〜#〜]注意[〜#〜]:これはI/O集中型の操作です。営業時間内やメンテナンスウィンドウの外では絶対に実行しないでください本番環境向け。

使用できる別のオプションは、断片化されたデータファイルの「コピーとしてバックアップ」を作成し、データベースを切り替えてそれらの「イメージコピー」をポイントすることです。次に、オリジナルをドロップし、イメージコピーをオリジナルとして使用してやり直し、「コピーとして」元の場所にバックアップします。それは少し長く、より複雑ですが、「ダウンタイム」は切り替えが実行されている間のほんの数秒です。

このオプションの詳細については、 Oracle Database 11.2 RMANリファレンスマニュアル を参照してください。

これがお役に立てば幸いです。

そうでない場合は、質問に詳細を追加してください。ソフトウェアのバージョン、メンテナンスウィンドウ時間、許容ダウンタイムなどのように。

1
Silvarion