web-dev-qa-db-ja.com

テーブルスペースのOracleデータファイルのサイズのバランス

パーティションがいっぱいになったため、データファイルを追加する必要のあるテーブルスペースがあります。新しいデータファイルはまだ入力されていません。データファイル間でデータを移動できますか?

2
r0tt

表領域に複数のデータファイルがある場合、Oracleは何をどのデータファイルに入れるかを管理します。あなたはこれを制御できません。これを行うのに十分なディスク容量がある場合は、次のデータジャグリング操作をお勧めします。

  • ソーステーブルスペースのすべてのデータを保持するのに十分な大きさのデータファイルを使用して、新しいテーブルスペースを作成します。
  • すべてのテーブル、インデックス、その他のオブジェクトをこの新しいテーブルスペースに移動します。
  • 古いテーブルスペースのデータファイルのサイズを変更します。
  • すべてのテーブル、インデックス、その他のオブジェクトをサイズ変更されたテーブルスペースに戻します。
  • すべてのインデックスを再構築します
  • 作成した一時テーブルスペースを削除します。

サイドノート。データファイルでMAXSIZEを使用していた場合は、おそらく今のところこのような状況ではなかったでしょう...ディスクスペース不足ではなくデータファイルサイズが不足するため、MAXSIZEを控えめなサイズに設定する傾向があります...

あなたを始めるためのいくつかのツール

テーブルを移動するDMLステートメントを作成する

select distinct 'ALTER TABLE ' || owner || '.' || segment_name || ' MOVE TABLESPACE target_tablespace;'
from dba_segments 
where tablespace_name = 'old_tablespace'
and segment_type = 'TABLE';

インデックスを移動するDMLステートメントを作成する

select distinct 'ALTER INDEX ' || owner || '.' || index_name || ' REBUILD TABLESPACE target_tablespace;'
from dba_indexes
where tablespace_name = 'old_tablespace'
and index_type != 'LOB';

データファイルのサイズ変更

ALTER DATABASE DATAFILE 'D:\ORADATA\file.DBF' RESIZE xxxMB MAXSIZE xxxMB;

インデックスの再構築

ALTER INDEX <SCHEMA>.<INDEX> REBUILD;
2
Wouter

データを新しいパーティションにall移動することを気にしない場合の代替(およびより簡単な)ソリューション:

  • 新しいデータファイルを削除します。
  • 古いデータファイルを新しいパーティションに移動します。
  • オプション:古いパーティションに2番目のデータファイルを作成します。

データファイルの移動に関する優れたマニュアルは次のとおりです。
http://www.Oracle-base.com/articles/misc/renaming-or-moving-Oracle-files.php#datafiles

2
Wouter