Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon RDS for Oracle DB インスタンスのストレージを管理する方法を教えてください。
ベストプラクティスを使用して Amazon Relational Database Service (Amazon RDS) for Oracle DB インスタンスのストレージを管理したいと考えています。
簡単な説明
Amazon RDS for Oracle DB インスタンスで storage-full になるのを避けるには、いくつかの方法があります。DB インスタンスで storage-full になると、インスタンスへのログインが停止し、データベースの拡張が停止します。空きストレージを増やすまでは、次のようなエラーが発生し、空きストレージを増やすための拡張が失敗します。
「ORA-27061: 非同期入出力の待機に失敗しました
エラー: Linux-x86_64 エラー: 28: デバイスに空き容量がありません」
解決方法
FreeStorageSpace メトリクスを監視する
FreeStorageSpace の急激な減少は、データベースの使用量が増加し、storage-full になる可能性があることを示しています。FreeStorageSpace が低下し、DB インスタンスが割り当てられたストレージの 90% 以上を使用している場合、データベースで LOW_STORAGE イベントが発生します。](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling)Auto Scaling を有効にしている[場合、インスタンスはストレージスペースを追加します。
Amazon CloudWatch アラームを作成して FreeStorageSpace メトリクスを監視し、ストレージスペースがしきい値に達したときに通知します。
自動拡張されたテーブルスペースをすべて確認する
RDS for Oracle DB インスタンスのデフォルトのテーブルスペースタイプは bigfile であり、AUTOEXTEND が有効です。bigfile テーブルスペースの最大サイズは 16 TiB です。テーブルスペースは、テーブルスペースの最大クォータか、DB インスタンスに割り当てられたストレージのどちらかまで増加します。割り当てられたストレージがいっぱいになると、インスタンスは storage-full に切り替わり、テーブルスペースが拡張できなくなります。詳細については、Oracle のウェブサイトで「テーブルスペースの自動拡張」を参照してください。
アプリケーションのニーズに基づいてテーブルスペース拡張を計画するのがベストプラクティスです。storage-full の問題を大量の取り込み前に回避するには、テーブルスペースのサイズを変更するか、より多くのスペースを割り当てます。ストレージをスケーリングしても、通常は DB インスタンスのパフォーマンスは影響を受けず、停止も発生しません。ストレージサイズを変更すると、DB インスタンスは storage-optimization になります。
注: DB インスタンスを変更する前に、「Amazon RDS DB インスタンスのストレージを操作する」を参照してください。
Amazon RDS の Oracle ファイルサイズクォータを確認する
RDS for Oracle DB インスタンス内の 1 つのファイルの最大サイズは 16 TiB です。このクォータを超えて bigfile テーブルスペースのデータファイルのサイズを変更すると、次のようなエラーが発生します。
「ORA-01237: データファイル 6 を拡張できません
ORA-01110: データファイル 6: '/rdsdbdata/db/mydir/datafile/myfile.dbf'ORA-27059:
ファイルサイズを小さくできませんでした。Linux-x86_64 エラー: 27:
ファイルが大きすぎます。追加情報: 2」
「ストレージクォータ超過」エラーを解決する
AWS アカウントレベルで割り当てられたストレージがクォータに達したときに、新しい RDS DB インスタンスを作成しようとすると、次のようなエラーが発生します。
「ストレージクォータを超えました<x>。要求サイズ: <x>」
このエラーを解決するには、クォータの増加をリクエストするか、アカウントの空き容量をすぐに増やすために未使用のバックアップを削除します。
BDUMP ディレクトリを占有している、サイズの大きいトレースファイルを管理する
BDUMP ディレクトリに大きなトレースファイルが作成されることがあります。これらのファイルはストレージを占有し、保持ポリシーに従って消去されます。DB インスタンスで storage-full が発生する原因にもなります。
トレースファイルが蓄積され、ディスク容量を消費する場合があります。デフォルトでは、Amazon RDS は 7 日より古いトレースファイルとログファイルをクリアします。トレースファイルの保存期間を設定するには、** show_configuration ** を使用します。設定結果を確認するには、SET SERVEROUTPUT コマンドを実行します。
トレースファイルの管理方法の詳細については、「Oracle データベースのログファイル」を参照してください。
BDUMP ディレクトリ内のファイルをサイズでソートするには、次のようなコマンドを実行します。
select FILENAME, FILESIZE/1024/1024/1024"GB",MTIME from TABLE (rdsadmin.rds_file_util.listdir(p_directory => 'BDUMP')) order by 3 desc
使用されていないファイルを特定したら、dbms パッケージへの fremove を使用してトレースファイル保持期間内の大きなファイルを削除します。
exec UTL_FILE.FREMOVE ('BDUMP',' <TRACEFILENAME');
次の例では、現在のトレースファイル保持期間を確認してから、新しいトレースファイル保持期間を設定します。
# Show the current tracefile retentionSQL> EXEC rdsadmin.rdsadmin_util.show_configuration; NAME:tracefile retentionVALUE:10080 DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted. # Set the tracefile retention to 24 hours:SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440);SQL> commit; #show the new tracefile retentionSQL> EXEC rdsadmin.rdsadmin_util.show_configuration; NAME:tracefile retentionVALUE:1440 DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.
DATA_PUMP_DIR ディレクトリを使用する大規模な Data Pump Director を管理する
Oracle Data Pump を使用してデータを移動すると、大きなダンプファイルをコピーすることにより、空きストレージが減少する可能性があります。この問題を解決するには、Amazon RDS for Oracle を Amazon Elastic File System (Amazon EFS) と統合します。この設定を使用する場合、データベースの更新に DATA_PUMP_DIR を使用する必要はありません。
アーカイブログの保存状況を確認する
Amazon RDS は、ポイントインタイムリカバリを行うために、バックアップ保持期間に基づいてアーカイブログを内部ストレージにバックアップします。RDS for Oracle のアーカイブログ保持設定に基づいて、RDS ストレージのローカルに保存されているアーカイブログは、割り当てられたストレージの使用量に影響します。
アーカイブされた redo ログを保持するには、次のパラメータを指定して rdsadmin.rdsadmon_util.set_configuration を実行します。
begin rdsadmin.rdsadmin_util.set_configuration( name => 'archivelog retention hours', value => '24'); end; / commit;
NAME:archivelog retention hours VALUE:24 DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.
特定の期間に DB インスタンスが使用した容量を確認するには、次のクエリを実行します。X は、クエリする時間数に置き換えます。
SELECT SUM(BLOCKS * BLOCK_SIZE) bytes FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= SYSDATE-(X/24) AND DEST_ID=1;
保存されているアーカイブログを確認するには、次のコマンドを実行し、ARCHIVELOG_DIR というディレクトリオブジェクトを作成します。
EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));
データベースで断片化されたオブジェクトを確認する
断片化によってデータベースの速度が低下し、ストレージスペースが必要以上に消費されます。断片化されていて容量を最も消費しているオブジェクトを特定するには、次のようなコマンドを実行します。
select owner,table_name,round((blocks8),2)/1024 "size (mb)" , round((num_rowsavg_row_len/1024/1024),2) "actual_data (mb)", (round((blocks8),2) - round((num_rowsavg_row_len/1024/1024),2)) "wasted_space (mb)" from dba_tables where (round((blocks8),2) > round((num_rowsavg_row_len/1024/1024),2)) and owner='&schema_name' order by 4 desc;
断片化を解消するには、エクスポートとインポートを使用するか、テーブルを再作成するか、テーブルを新しいテーブルスペースに移動します。
注: 空きストレージメトリクスが影響を受けるのは、断片化されたオブジェクトを新しいテーブルスペースに移動して空にした後に、断片化されたテーブルスペースを削除した場合のみです。
AWR を使用して DB インスタンスの増加傾向を分析する
Oracle Enterprise エディションでは、AWR Explorer を使用して履歴情報をクエリすることで、データベースの増加傾向を分析できます。特定の日数にわたるオブジェクトタイプごとのデータベーススキーマの増加を確認するには、次のコマンドを実行します。
title "Total Disk Used by Object Type" select c.segment_type, sum(space_used_delta) / 1024 / 1024 "Space used (M)", sum(c.bytes) / 1024 / 1024 "Total Space (M)", round(sum(space_used_delta) / sum(c.bytes) * 100, 2) || '%' "Percent of Total Disk Usage" from dba_hist_snapshot sn, dba_hist_seg_stat a, dba_objects b, dba_segments c where end_interval_time > trunc(sysdate) - &days_back and sn.snap_id = a.snap_id and b.object_id = a.obj# and b.owner = c.owner and b.object_name = c.segment_name and space_used_delta > 0 and c.owner = '&schema_name' group by rollup(segment_type);
他の方法を実装する
インスタンスの storage-full を防止するには、次の方法を実装します。
- DB インスタンスのステータスをクエリするには、Amazon RDS を監視するメトリクスを使用します。
- DB インスタンスのステータスを定期的に確認してください。
- ワークロードが周期的または予測不可能な場合は、DB インスタンスのストレージオートスケーリングを有効にします。
- Amazon RDS イベントカテゴリとイベントメッセージで、RDS-EVENT-0007 および RDS-EVENT-0089 を確認します。
関連項目
Amazon RDS DB インスタンスのプロビジョニング済みストレージサイズ合計を減らす方法を教えてください
Amazon RDS for Oracle DB インスタンスが予想よりも多くのストレージを使用している理由を教えてください
