一時テーブル領域は複雑なクエリ、インデックスオペレーション、ソートオペレーションなどに対応するために大幅に増えることがあります。RDS Oracle データベースはその作成時、すべてのテーブル領域に対して自動拡張が有効になっています。つまり、各テーブル領域は、追加が不要になるか、割り当てられたストレージが使い切られるまで、大きくなり続けます。

Oracle データベースでは、ディスク領域がさまざまなファイル形式(制御ファイル、オンライン REDO ログファイル、アーカイブ REDO ログファイル、データファイル、一時ファイル(temp ファイル)など)に使用されます。通常、ディスク領域のほとんどはデータファイルと一時ファイルに使用されます。

Oracle RDS DB インスタンスでは、データファイルのサイズ単位でストレージを指定します。これは場合によって、データファイルに実際に保存されるデータに影響を与えることがあります。たとえば、よくあるのが、200 GB のデータファイルを割り当てても、そのファイルには 100 GB 以下のデータしか保存されない場合です。実際、RDS サービスに関する CloudWatch「FreeStorageSpace」メトリックスには、データファイルにまだ保存されていない空き領域のみが示されます。以下のクエリは、RDS Oracle DB インスタンスの領域がどのように割り当てられているか調べるために役立ちます。

一時ファイルに割り当てられた領域のサイズと比較して、データに割り当てられた領域のサイズを調べるには、以下のクエリを実行します。

     SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024/1024 AS GBYTES FROM
     DBA_DATA_FILES GROUP BY TABLESPACE_NAME;
     SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024/1024 AS GBYTES FROM
     dba_temp_files GROUP BY TABLESPACE_NAME;

データがデータベースから削除されると、データベースに割り当てられた空き領域はその対応する量だけ増えるため、データベースに割り当てられた領域の合計サイズは変わりません。データベースに割り当てられた空き領域のサイズを調べるには、以下のクエリを実行します。

     SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024/1024 AS GBYTES FROM
     DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;

オンライン REDO ログに割り当てられたサイズを調べるには、以下のクエリを実行します。

     SELECT SUM(bytes*members) bytes FROM v$log;

制御ファイルに割り当てられたサイズを調べるには、以下のクエリを実行します。

     SELECT SUM(block_size * file_size_blks) bytes FROM v$controlfile;

監査 ADUMP とトレース/ファイル BDUMP ディレクトリに割り当てられたサイズを調べるには、以下のクエリを実行します。

     SELECT * FROM DBA_DIRECTORIES;
     SELECT * FROM table(rdsadmin.rds_file_util.listdir('ADUMP'));
     SELECT * FROM table(rdsadmin.rds_file_util.listdir('BDUMP'));
     SELECT SUM(FILESIZE)/1024/1024 as total_mb FROM 
     table(rdsadmin.rds_file_util.listdir('ADUMP'));
     SELECT SUM(FILESIZE)/1024/1024 as total_mb FROM
     table(rdsadmin.rds_file_util.listdir('BDUMP'));

この問題を解決するには、以下の手順を完了する必要があります。

  1. 必要以上のストレージを消費しているテーブル領域をすべて縮小します。想定よりも多くのストレージを使用している場合は、ファイルのサイズをより妥当な値に変更することから開始できます。たとえば、一時テーブル領域が 100 GB のストレージを消費している場合は、以下のコマンドを実行して、10 GB に一時テーブル領域を縮小できます。
         ALTER TABLESPACE temp RESIZE 10g;

    テーブル領域が 10 GB のしきい値を超えた場合、このコマンドはエラーで失敗します。その場合は、コマンドを再試行し、resize パラメータの値を徐々に増やすこともできます。また、以下のコマンドの実行を試すこともできます。
         ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;
  2. この値を徐々に増やすことが実行可能な選択肢でない場合は、現在割り当てられている一時セグメントを使用するセッションをすべて強制終了することを検討できます。一時セグメントが割り当てられているセッションを特定するには、以下のクエリを実行します。
         SELECT * FROM v$sort_usage;
  3. セッションを強制終了することが実行可能な選択肢ではない場合、他の手順の実行を検討することもできます。たとえば、別のデフォルトの temp2 テーブル領域の作成、元の一時テーブル領域のドロップ、必要なパラメータを使用した新しいデフォルトの一時テーブル領域の再作成、temp2 テーブル領域のドロップです。この手順の詳細については、「一時テーブル領域のサイズ変更」を参照してください。
  4. 一時テーブル領域以外の領域を使用する場合は、データファイルの末尾の領域を解放するためのセグメントを確保することで、データファイルを縮小できます。オンライン REDO ログに割り当てられたテーブル領域を使用する場合、このプロセスは面倒になることがあります。領域が自動的にクリアされてデータファイルの縮小プロセスが完了するまでに、いくらかの時間がかかることがあります。
  5. 現在のアーカイブログおよびトレースファイル保持の設定を表示するには、以下のコマンドを実行します。
         SET SERVEROUTPUT ON;
         EXEC rdsadmin.rdsadmin_util.show_configuration;
  6. 不要になって削除できる .dmp ファイルがあるかどうか確認します。data_pump_dir 内でインポート後にクリーンアップされていない .dmp ファイルがあるかどうか確認するには、以下のクエリを実行します。
         SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR'))
         ORDER by mtime;
    このクエリにより .dmp ファイルが見つかった場合は、以下のクエリを使用してファイル名を指定することで、それらのファイルを削除できます。
         EXEC utl_file.fremove('DATA_PUMP_DIR','[file name]');

Amazon RDS, ストレージ, テーブル領域の縮小, FreeStorageSpace, 過剰なストレージ領域, Oracle ストレージサイズ


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。