0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle 19c se2 audit ログ定期クリーンアップ 備忘録

Posted at

ChatGPTの回答の備忘録だけ。

統一監査のログがデータベースのストレージを圧迫しないように、定期的にログをクリーンアップすることが重要です。Oracle は DBMS_AUDIT_MGMT パッケージを提供しており、これを使用して監査ログを管理およびクリーンアップできます。

ステップ 1:DBMS_AUDIT_MGMT パッケージの有効化

まず、DBMS_AUDIT_MGMT パッケージがデータベースで有効になっていることを確認します。通常、Oracle 19c ではこのパッケージはデフォルトで利用可能です。もし利用できない場合は、データベース管理者に連絡して有効化してください。

ステップ 2:クリーンアップポリシーの設定

DBMS_AUDIT_MGMT パッケージを使用して、古い監査ログを定期的にクリーンアップするポリシーを設定できます。例えば、特定の期間内の監査ログだけを保持し、それ以外のログを削除することができます。

例:過去 30 日間の監査ログを保持する設定

BEGIN
  -- 監査ログ管理の初期化
  DBMS_AUDIT_MGMT.INIT_CLEANUP(
    AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, 
    DEFAULT_CLEANUP_INTERVAL => 12);  -- 12 時間ごとにチェック

  -- クリーンアップポリシーの設定、過去 30 日間のログを保持
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
    AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, 
    LAST_ARCHIVE_TIME => SYSTIMESTAMP - INTERVAL '30' DAY);
  
  -- クリーンアップの実行
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
    AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
/

ステップ 3:定期的な自動クリーンアップの設定

クリーンアップ作業を自動化するために、上記のスクリプトをスケジューリングタスク(DBMS_SCHEDULER を使用)として設定し、定期的に実行することができます。例えば、毎日または毎週クリーンアップタスクを実行するように設定します。

例:毎日クリーンアップを行うジョブの作成

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'audit_log_cleanup_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
                         AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
                         USE_LAST_ARCH_TIMESTAMP => TRUE); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
    enabled         => TRUE);
END;
/

この例では、毎日午前 2 時に実行されるクリーンアップジョブ audit_log_cleanup_job を作成しています。このジョブは、30 日を超える統一監査ログを自動的に削除します。

ステップ 4:クリーンアップジョブの監視

作成したクリーンアップジョブの状態を監視し、正常に実行されているか確認することができます。これには、DBA_SCHEDULER_JOBSDBA_SCHEDULER_JOB_RUN_DETAILS ビューを使用します。

-- クリーンアップジョブの状態を確認
SELECT job_name, state, last_start_date, last_run_duration
FROM dba_scheduler_jobs
WHERE job_name = 'AUDIT_LOG_CLEANUP_JOB';

-- クリーンアップジョブの実行履歴を確認
SELECT job_name, status, run_duration, log_date
FROM dba_scheduler_job_run_details
WHERE job_name = 'AUDIT_LOG_CLEANUP_JOB';

これらの手順を通じて、Oracle の統一監査ログを効率的に管理し、ストレージスペースが監査ログによって圧迫されることを防ぐことができます。定期的なクリーンアップにより、データベースのパフォーマンスとストレージリソースが適切に維持されます。

はい、従来の監査(Traditional Auditing)でも、同様の方法でログを定期的にクリーンアップすることが可能です。Oracle が提供する DBMS_AUDIT_MGMT パッケージは、統合監査(Unified Auditing)だけでなく、従来の監査ログの管理にも使用できます。以下に、従来の監査ログを定期的にクリーンアップする手順を説明します。

ステップ 1:従来監査のログ管理の初期化

まず、従来監査ログの管理を初期化する必要があります。DBMS_AUDIT_MGMT.INIT_CLEANUP を使用して設定します。

BEGIN
  -- 従来監査ログの管理を初期化
  DBMS_AUDIT_MGMT.INIT_CLEANUP(
    AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUDIT_TRAIL,  -- 従来監査ログに適用
    DEFAULT_CLEANUP_INTERVAL => 12);  -- 12 時間ごとにチェック
END;
/

ステップ 2:クリーンアップポリシーの設定

DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP を使用して、ログの保持期間を設定できます。例えば、過去 30 日間の監査ログのみを保持するように設定します。

BEGIN
  -- クリーンアップポリシーの設定、過去 30 日間の監査ログを保持
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
    AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUDIT_TRAIL, 
    LAST_ARCHIVE_TIME => SYSTIMESTAMP - INTERVAL '30' DAY);
END;
/

ステップ 3:定期的なクリーンアップの実行

統合監査と同様に、従来監査ログのクリーンアップを定期的に実行するために、スケジューリングタスクを作成することができます。例えば、毎日実行されるタスクを作成します:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'traditional_audit_log_cleanup_job',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
                         AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUDIT_TRAIL,
                         USE_LAST_ARCH_TIMESTAMP => TRUE); END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
    enabled         => TRUE);
END;
/

このタスクは毎日午前 2 時に実行され、30 日を超える従来監査ログを自動的に削除します。

ステップ 4:クリーンアップタスクの監視

クリーンアップタスクの状態を監視し、正常に実行されているか確認することができます。これには、DBA_SCHEDULER_JOBSDBA_SCHEDULER_JOB_RUN_DETAILS ビューを使用します。

-- クリーンアップタスクの状態を確認
SELECT job_name, state, last_start_date, last_run_duration
FROM dba_scheduler_jobs
WHERE job_name = 'TRADITIONAL_AUDIT_LOG_CLEANUP_JOB';

-- クリーンアップタスクの実行履歴を確認
SELECT job_name, status, run_duration, log_date
FROM dba_scheduler_job_run_details
WHERE job_name = 'TRADITIONAL_AUDIT_LOG_CLEANUP_JOB';

これらの手順を実行することで、Oracle データベース内の従来監査ログを効果的に管理し、ログファイルがストレージを過剰に占有することを防ぎ、データベースのパフォーマンスと可用性を確保することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?