ASM インスタンスの監査ファイルの宛先ディレクトリは、定期的に管理されていない場合、膨大な数のファイルを含むように成長する可能性があります。非常に多くのファイルがあると、ファイル システムの空きディスク領域または inode が不足したり、ファイル システムのディレクトリ スケーリング制限により Oracle の実行が非常に遅くなる可能性があり、ASM インスタンスがハングアップしているように見えることがあります。
この投稿では、Linux cron ユーティリティを使用して、監査ファイルの宛先ディレクトリ内のファイル数を管理する方法について説明します。これらの手順は、すべてのデータベース サーバーの ASM インスタンスに対して実行する必要があります。このドキュメントでは、ASM インスタンスのみの監査ファイルの宛先ディレクトリを管理する方法について説明します。
ステップ 1 – ASM 監査ディレクトリを特定する
監査ファイルを格納できるディレクトリは 3 つあります。過度の成長を制御するには、3 つすべてを管理する必要があります。
2 つのデフォルトの場所は、ASM インスタンスの起動時の環境変数の設定に基づいています。システムのデフォルトの場所を特定するには、グリッド インフラストラクチャ ソフトウェアの所有者 (通常は oracle または grid) としてログインし、ASM インスタンスに接続できるように環境を設定してから、以下に示す「echo」コマンドを実行します。この例では、2 つのデフォルトの監査ディレクトリは /u01/app/11.2.0/grid/rdbms/audit と /u01/app/oracle/admin/+ASM1/adump です。
$ . /usr/local/bin/oraenv ORACLE_SID = [+ASM1] ? +ASM1 The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle
$ echo $ORACLE_HOME/rdbms/audit /u01/app/11.2.0/grid/rdbms/audit
$ echo $ORACLE_BASE/admin/$ORACLE_SID/adump /u01/app/oracle/admin/+ASM1/adump
3 番目の ASM 監査ディレクトリは、SQL*Plus を使用して ASM インスタンスにログインし、次のステートメントを実行することで見つけることができます:
$ sqlplus '/ as sysasm' SQL> select value from v$parameter where name = 'audit_file_dest'; VALUE -------------------------------------------------------------------------------- /u01/app/11.2.0/grid/rdbms/audit
3 つの ASM 監査ディレクトリはすべて cron で管理されます。
ステップ 2 – グリッド インフラストラクチャ ソフトウェアの所有者に cron を使用する権限を与える
監査ファイルは、グリッド インフラストラクチャ ソフトウェアの所有者 (通常は oracle または grid) が所有します。監査ファイルを移動または削除するコマンドは、グリッド インフラストラクチャ ソフトウェアの所有者として実行する必要があります。 root として、グリッド インフラストラクチャ ソフトウェアの所有者を /etc/cron.allow ファイルに追加します。以下の例では、ユーザー oracle を使用しています。
# echo oracle >> /etc/cron.allow
ステップ 3 – コマンドを crontab に追加して、監査ファイルを毎週管理する
グリッド インフラストラクチャ ソフトウェアの所有者として、crontab ファイルにエントリを追加します。次のコマンドは、vi(P) コマンド編集セッションを開始して、既存の crontab ファイルを編集するか、まだ存在しない場合は新しい crontab ファイルを作成します。
$ crontab -e
このファイルに以下を 1 行で追加してください:
0 2 * * sun /usr/bin/find /u01/app/11.2.0/grid/rdbms/audit /u01/app/11.2.0/grid/rdbms/audit /u01/app/oracle/admin/+ASM1/adump -maxdepth 1 -name '*.aud' -mtime +30 -delete
この crontab エントリは、毎週日曜日の午前 2 時に find コマンドを実行します。 find コマンドは、30 日より古い 3 つの ASM 監査ディレクトリ内のすべての監査ファイルを削除します。
監査ファイルを長期間保持したい場合は、find(1) コマンドで監査ファイルを削除する代わりに、次のような crontab エントリを使用して監査ファイルを別のディレクトリまたはストレージ デバイスにアーカイブできます。 P>
0 2 * * sun /usr/bin/find /u01/app/11.2.0/grid/rdbms/audit /u01/app/11.2.0/grid/rdbms/audit /u01/app/oracle/admin/+ASM1/adump -maxdepth 1 -name '*.aud' -mtime +30 -execdir /bin/mv {} /archived_audit_dir \;
この crontab エントリは、毎週日曜日の午前 2 時に find コマンドを実行します。 find コマンドは、30 日より古い 3 つの ASM 監査ディレクトリ内のすべての監査ファイルを /archived_audit_dir に移動します。 vi コマンド ([ESC] :wq) を使用して crontab ファイルを保存して終了し、crontab の内容を確認します。
$ crontab -l 0 2 * * sun /usr/bin/find /u01/app/11.2.0/grid/rdbms/audit /u01/app/11.2.0/grid/rdbms/audit /u01/app/oracle/admin/+ASM1/adump -maxdepth 1 -name '*.aud' -mtime +30 -delete
トラブルシューティング
古い監査ファイルが削除されていない場合は、次の手順を実行してください:
1. cron がスケジュールどおりに find コマンドを実行していることを監視し、正しいグリッド インフラストラクチャ ソフトウェア所有者として、/var/log/cron を確認します。 次のようなエントリの root ユーザーとしてファイル:
Feb 20 02:00:01 dm01db01 crond[6936]: (oracle) CMD (/usr/bin/find /u01/app/11.2.0/grid/rdbms/audit /u01/app/11.2.0/grid/rdbms/audit /u01/app/oracle/admin/+ASM1/adump -maxdepth 1 -name '*.aud' -mtime +60 -delete)
2. crontab エントリを所有するユーザー (つまり、グリッド インフラストラクチャ ソフトウェアの所有者) としてログインします。 find コマンドを手動で実行して、コマンド構文が正しいこと、およびエラーが報告されていないことを確認してください。