データベース監査テーブルでのイベントをログ記録するために 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_TRAIL を NONE に設定し、データベースを再起動して、操作を再試行します。このプロセスが完了したら、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;
関連情報
Oracle を実行している Amazon RDS インスタンスで sys.aud$ テーブルを削除するにはどうしたらいいですか?
Oracle DB インスタンスの一般的な DBA データベースタスク
Oracle DB インスタンスの一般的な DBA ログタスク
Oracle Database のログファイル