Amazon RDS for Oracle 使用時の「ORA-01653: unable to extend table SYS.AUD$ or FGA_LOG$ in tablespace SYSTEM」エラーを回避するにはどうすればよいですか?

最終更新日: 2020 年 6 月 24 日

データベース監査テーブルでのイベントをログするために Amazon Relational Database Service (Amazon RDS) データベースで Oracle 監査機能を有効にしたのですが、SYSTEM テーブルスペースが予想以上に大きくなっており、

ORA-01653: unable to extend table..." for SYS.AUD$ or FGA_LOG$ in the tablespace SYSTEM.」というエラーメッセージが表示されました。

このエラーを解決するにはどうすればよいですか?

簡単な説明

ORA-01653 エラーは、SYSTEM テーブルスペースにある SYS.AUD テーブルの空き領域不足が原因で発生します。これは、AUD$FGA_LOG$ の各 Oracle 監査テーブルがデフォルトで定義されている場所です。このエラーは、テーブルが追加のデータに対応するために自動拡張しようとしても、拡張できない場合に発生します。テーブルスペースが満杯になる原因となり得る監査アクションの詳細については、監査の設定と管理に関する Oracle ドキュメントを参照してください。

注意: AUDIT_SYS_OPERATIONS は、Amazon RDS for Oracle でデフォルトで有効化されています。

解決方法

この問題を解決するには、以下の解決方法のうち 1 つ以上検討してください。

専用のテーブルスペースに監査テーブルを移行する

監査テーブルは、DELETE ステートメントを使用した手動または自動のパージルーチンがレコードをクリーンアップするまで無限に大きくなります。空き領域は影響を受けたセグメントに対してのみ解放されるため、SYSTEM テーブルスペース内のテーブルをパージしても、AUD$FGA_LOG$ の各テーブルのサイズに機能的な変化はもたらされません。これは、フラグメンテーション問題の原因となる場合があります。

AUDIT テーブルを SYSTEM テーブルスペースから異なるテーブルスペースに移行させることで、RDS DB インスタンスの監査テーブルのサイズをより良く制御することができるようになります。テーブルはユーザーが独自に移行できますが、RDS DB インスタンスでバージョン 11g R2 以降の Oracle を実行している場合は、DBMS_AUDIT_MGMT パッケージを利用できます。

手動でテーブルを移行するには、以下の手順を実行してください。

1.    以下のようなコマンドを実行して、新しいテーブルスペースを作成します。

CREATE TABLESPACE <name>;

注意: AUTOEXTENSIBLE セグメント領域管理 (新しいテーブルスペースのためにデフォルトで有効化されます) を伴うテーブルをすると、その後のテーブルサイズの変更が簡単になります。

2.    以下のようなコマンドを実行して、AUD$ テーブルを新しいテーブルスペースに移行します。

BEGIN
SYS.DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
audit_trail_location_value => '<name>');
END;
/ 

3.    以下のようなコマンドを実行して、FGA_LOG$ テーブルを新しいテーブルスペースに移行します。

BEGIN
SYS.DBMS_AUDIT_MGMT.set_audit_trail_location(audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD, audit_trail_location_value => '<name>');
END;
/

注意: この操作の完了には、テーブルのサイズに応じて時間がかかる場合があります。大規模または頻繁にアクセスされるテーブルがある場合は、デッドロックエラーが発生する可能性もあります。デッドロックエラーを解決するには、一時的に DB_AUDIT_TRAILNONE に設定し、データベースを再起動して、操作を再試行します。このプロセスが完了したら、DB_AUDIT_TRAIL を元に戻すことができます。

監査テーブルのベストプラクティスに従う

管理可能な監査テーブルを維持するには、監査テーブルが消費する領域を減らします。また、最小限の関連アクションを監査して、ORA-01653 エラーの発生を最小限に抑えてください。最後に、監査証跡レコードのアーカイブとパージを定期的に実施します。詳細については、一般的なデータベースアクティビティの監査のためのガイドラインに関する Oracle Database ドキュメントを参照してください。

SYSTEM テーブルスペースの AUTOEXTEND をオンにする

Oracle を実行する RDS DB インスタンスでは、SYSTEM テーブルスペースの AUTOEXTEND がデフォルトで ON に設定されています。AUTOEXTEND を手動でオフにすると、SYSTEM テーブルスペースのために追加領域をプロビジョニングするデータベースの能力に影響が及ぶ可能性があります。ALTER TABLESPACE コマンドを実行して、この設定を SYSTEM テーブルスペースのために有効化することもできます。

ALTER TABLESPACE SYSTEM AUTOEXTEND ON;

詳細については、「テーブルスペースの作成とサイズ設定」を参照してください。

SYSTEM テーブルスペースの MAXSIZE をより大きな値に設定する

MAXBYTES または MAXBLOCKS に対する SYSTEM テーブルスペースの設定が低すぎる場合は、SYSTEM テーブルスペースの MAXSIZE をより大きな値に設定します。

以下のようなコマンドを実行して、SYSTEM テーブルスペースの最大サイズの制限を取り除くこともできます。

ALTER TABLESPACE SYSTEM AUTOEXTEND ON MAXSIZE UNLIMITED;