shutdown 後に startupでインスタンスが起動しない srvctl だと起動できる
sqlplusからstartup実行してもインスタンスが起動せず、srvctlコマンドであれば起動したのでその動作について調査した時のメモ
結論先に記載するとOCRとinitSID.oraで参照すべきSPFILEの場所が違うからという仕様から発生しているものでした。
++-----
SQL> shutdown immediate ;
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATAC3/ORCL/spfileORCL.ora'
ORA-17503: ksfdopn:10 Failed to open file +DATAC3/ORCL/spfileORCL.ora
ORA-15173: entry 'spfilethdorcl.ora' does not exist in directory 'ORCL'
ORA-06512: at line 4
→エラーが発生してstartupだと起動できない。
$ su - grid
$ srvctl start db -d ORCL
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
ORCL2
→srvctlだと起動できた
メッセージの内容を見ると原因は、srvctlは正しいspfileのパスを確認した上でインスタンス起動ができるが、sqlplusコマンド実行時に正しいspfileの場所を認識してくれてないことから事象が発生しているように思えた。
$ srvctl config database -d ORCL -a | grep spfile
Spfile: +DATAC3/ORCL/PARAMETERFILE/spfile.297.919398405 ★DB起動中のshow parameter spfileのパラメータと同じ値
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATAC3/ORCL/PARAMETERFILE/
spfile.297.919398405 ★srvctlと同じ値
sqlplusのstartup処理で+DATAC3/ORCL/PARAMETERFILE/spfile.297.919398405をきちんと見れくれてないのが問題なのか、設定が問題なのかは判断できませんでした。
仮にこの事象が発生して、なんとかsqlplusから起動したい場合
SQL> create pfile='/var/tmp/pfile' from spfile='+DATAC3/ORCL/PARAMETERFILE/spfile.297.919398405'
SQL> startup pfile='/var/tmp/pfile'
でstartupコマンドで明示的に起動時に利用するpfileを指定すれば起動可能です。
なお、sqlplusは基本的に以下3つの優先順位でパラメータを見に行くので
%ORACLE_HOME%\database\spfile%ORACLE_SID%.ora
%ORACLE_HOME%\database\spfile.ora
%ORACLE_HOME%\database\init%ORACLE_SID%.ora
のいずれか存在するファイルに
SPFILE='+DATAC3/ORCL/PARAMETERFILE/spfile.297.919398405'
を定義すれば起動する。
追記
sqlplusが見てるのは
/u01/app/oracle/product/12.1.0.2/dbhome_1/
でした。たぶんここの情報が違うと起動できない。