概要
Oracleインスタンスが未起動状態の際、SQL*Plusからシステム権限でログインしようとすると、ORA-09925 が出てログイン出来ない場合の対処をまとめました。
エラーメッセージ
oracle@localhost:~$ sqlplus / as sysdba
ERROR:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925`
対処
以下のディレクトリの作成とoracle:oinstallへの読み書き権限の付与。
oracle@localhost:~$ mkdir -p <初期化パラメータAUDIT_FILE_DESTで指定したディレクトリ>
oracle@localhost:~$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
oracle@localhost:~$ mkdir -p $ORACLE_HOME/rdbms/audit
oracle@localhost:~$ chmod 770 <初期化パラメータAUDIT_FILE_DESTで指定したディレクトリ>
oracle@localhost:~$ chmod 770 $ORACLE_BASE/admin/$ORACLE_SID/adump
oracle@localhost:~$ chmod 770 $ORACLE_HOME/rdbms/audit
原因
元々、HA構成のクラスタサーバーを作ってたのですが、Oracleは稼動系待機系それぞれのローカルHDD上にインストールして、DIAGNOSTIC_DESTとORADATA領域は共有ディスク上にという構成で作成していました。
DBCAからDBインスタンス(ORACLE_SID=orcl)を作成する際は、共有ディスクをマウントした稼動系から実施し、共有ディスク上にデータファイルを作成しました。その際、稼動系では$ORACLE_BASE/admin/orcl/adumpと$ORACLE_HOME/rdbms/auditが自動的に作成されましたが、待機系側では該当のディレクトリが作成されていないため、待機系側に共有ディスクをマウントして起動しようとすると、「as sysdba」によるログインの記録を残すためのディレクトリにアクセス出来ず、ログイン段階からエラーとなる事象のようです。
初期化パラメータ AUDIT_FILE_DEST で指定したディレクトリは初期化パラメータを読み込む(=インスタンスが起動状態)段階から使われますが、それ以前の監査情報は初期化パラメータが見れない状態のため、$ORACLE_HOMEや$ORACLE_BASE上のフォルダに監査情報を残しているのですね。
普段あまり監査情報まで見ないので勉強になりました。
参考情報元
以下のブログでほぼピンポイントの情報を見つけて、これが解決の決め手でした。
ORA-09925: Unable to create audit trail file tips
There is a note 69642.1 on MOSC that lists 4 possible causes for this ORA-009925 error. All of the error relwte to file ans directory permissions not allowing writes to the files (i.e. chmod 760):
- AUDIT_FILE_DEST is not writable (chown +w $AUDIT_FILE_DEST)
- $ORACLE_BASE/admin/$ORACLE_SID/adump exists but is not writable
- $ORACLE_HOME/rdbms/audit is not writable