おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

ORA-3113が発生してDBが起動しない

厳しい残暑の続くある日、DBインスタンスを起動しようとしたところエラーが出力され、起動に失敗したとの連絡がありました。
リリース準備中の新本番環境で、構成は以下の通りです。

Oracle Restart(SIHA) EE 12.1.0.2
AIX Version 7.1

エラー内容は以下の通り。

$ srvctl start database -d orcl

PRCR-1079 : Failed to start resource ora.orcl.db

CRS-5017: The resource action "ora.orcl.db start" encountered the following error:

ORA-03113: end-of-file on communication channel Process ID: 13566184 Session ID: 6 Serial number: 51517 . For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/myhost/crs/trace/ohasd_oraagent_oracle.trc".


CRS-2674: Start of 'ora.orcl.db' on 'myhost' failed


GIのリソース状況は以下の通り。

$ crsctl stat res -t

--------------------------------------------------------------------------------

Name Target State Server State details

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

(略)

ora.orcl.db

1 ONLINE OFFLINE STABLE

--------------------------------------------------------------------------------

 

ORA-03113の原因は様々ですが、srvctlからだと細かい状況がわからないので、まずsqlplusから起動可能か確認してもらいました。
sqlplusからの起動結果は以下の通り。mountまではされているようです。

SQL> startup

ORACLE instance started.


Total System Global Area 3003121664 bytes

Fixed Size 3002488 bytes

Variable Size 771755912 bytes

Database Buffers 2214592512 bytes

Redo Buffers 13770752 bytes

Database mounted.

ORA-03113: end-of-file on communication channel Process ID: 11665506 Session ID: 6 Serial number: 26183

  

下記ドキュメントを参照し、1から3の手順で起動可能かどうか、確認してもらいました。 

Database Creation using DBCA on AIX fails with ORA-3113 (ドキュメントID 2130768.1)

The instance startup may fail with ORA-07445: [clsssterm()+183] [SIGSEGV] (ドキュメントID 1937915.1)
Master Note: Troubleshooting ORA-03113 (ドキュメントID 1506805.1)

1.Paging spaceが使用可能か確認
※下記の例では使用不可。
使用可能でない場合、swapon コマンドで有効にする。

# lsps -a

Page Space Physical Volume Volume Group Size %Used Active Auto Type Chksum

hd6 hdisk3 rootvg 133120MB 0 no yes lv 0

2.diagnostic_destの出力先のディレクトリに充分な空きがあるか。無ければ古いトレース等を削除して、空きを増やす。

3. 以下のディレクトリの権限を確認する。
755でなければ、755に変更する。

$ ls -ld $ORACLE_HOME/srvm/mesg/

 更に、以下の手順でも確認してくれるよう、依頼しました。
startupコマンドでまとめてした場合、mount直後にエラーで落ちてしまったのか、mountに問題は無いが、openでエラーになったのか、はっきりしないからです。

$ sqlplus / as sysdba

SQL> startup nomount

※数十秒、待つ

SQL>alter database mount;

※数十秒、待つ

SQL>alter database open;

1から4の手順全てを試した結果、swap設定、diagディレクトリの空き容量、mesgディレクトリの権限いずれも問題は無く、mount状態では安定しており、openでエラーが発生する事が明らかになりました。
そこで送付を依頼しておいたアラートログを確認したところ。。。

Unable to create archive log file '+ARCH'

Tue Sep 10 10:34:39 2019

Errors in file /work/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_19136700.trc:

ORA-19504: failed to create file "+ARCH"

ORA-17502: ksfdcre:4 Failed to create file +ARCH

ORA-15041: diskgroup "ARCH" space exhausted

ARCH: Error 19504 Creating archive log file to '+ARCH'

アーカイブ領域が一杯で起動できないだけでした。
最初からアラートログを送ってもらえば良かった・・・・・・

で、以下の通り、削除してもらい、無事起動しました。

$ rman target /

RMAN> startup mount

RMAN> delete noprompt archivelog all;

(略)

deleted archived log

Deleted 113 objects

RMAN> alter database open;

Statement processed

RMAN> exit


DB稼働中にアーカイブ領域が一杯になれば、crsctl stat res の結果でStuck Archiverとなるので一目瞭然ですが、今回は起動時のエラーだったので気づくのが遅れてしまいました。
アラートログは最初から確認しておくべきでした。