ディスク領域が不足しています。
サーバーには420 GBのHDDがあり、Microsoft SQL ServerとOracle Server(10g)を実行します。
Oracleサーバーは、最大315 GBのスペースを使用します。 100GBのMicrosoft SQL Serverデータベースをロードしました。これで約5GBの空きがあり、SQL Serverデータベースのバックアップを作成する必要があります。
最初にバックアップを別のドライブに移動しようとしましたが、これは機能しませんでした。
次に、Oracle Serverの割り当てられたスペースのサイズを変更しようとしました。これは、各ファイルで約4GBが使用される20GBの6つのファイルで構成されています。このファイルのサイズを10GBに変更しようとすると、OracleエラーORA-03297が発生しましたが、4GBが使用されています。何度か試した後、一部のファイルを16/17/18GBに短縮できましたが、それでもまだスペースが必要です。
Oracleファイルのサイズをそれぞれ10 GBに変更できるソリューションはありますか?
Coalesceを使用して未使用の領域の割り当てを解除しましたが、それも機能しませんでした。
テーブルのHWM(ハイウォータマーク)がデータファイルを圧縮しようとしたサイズを超えているため、Oracle ORA-03297エラーが表示されます。
最初に、影響を受ける各テーブルの「スペースを縮小」してみてください。
alter table fragmentedtable enable row movement;
alter table fragmentedtable shrink space;
次に、現在のデータベースオブジェクトを移動せずに、既存の各テーブルスペースファイルからどれだけのスペースを解放できるかを確認します。
次の( Ask Tom &ブロックサイズを8kと想定)から取得すると、メガバイト単位で、各データファイルから現在解放できるスペースの量がわかります。
select file_name,
ceil( (nvl(hwm,1)*8192)/1024/1024 ) SHRINK_TO,
ceil( blocks*8192/1024/1024) CURRENT_SIZE,
ceil( blocks*8192/1024/1024) -
ceil( (nvl(hwm,1)*8192)/1024/1024 ) SAVINGS
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
例えば:
FILE_NAME SHRINK_TO CURRENT_SIZE SAVINGS
-------------------------------------------------- ---------- ------------ ----------
/u01/app/Oracle/oradata/PHIL112/system01.dbf 696 700 4
/u01/app/Oracle/oradata/PHIL112/sysaux01.dbf 579 610 31
/u01/app/Oracle/oradata/PHIL112/users01.dbf 85 93 8
/u01/app/Oracle/oradata/PHIL112/undotbs01.dbf 65 120 55
SQL>
サイズを変更するには、以下を使用します。
alter database datafile '/path/to/data/file.dbf' resize 100m;
次に使用できるオプションは、新しいテーブルスペース(および関連するデータファイル)を作成し、現在のデータベースオブジェクトを新しいテーブルスペースに移動することです。これは、datapumpを使用するか、手動で実行できます。 Tim Hallがこれを実行する方法についての優れた記事 here を公開しています。