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_JOBS
と DBA_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_JOBS
と DBA_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 データベース内の従来監査ログを効果的に管理し、ログファイルがストレージを過剰に占有することを防ぎ、データベースのパフォーマンスと可用性を確保することができます。