Oracle DBの自動起動設定(CentOS 7)

OracleをインストールしただけではOS起動時に自動的にOracleが起動するようにはならないので、手動で設定する必要がある*1CentOS 7はsystemdを採用しているので、systemdを使って自動起動を構成するのが正統だと思うが、Oracleが配布しているDeveloper VMRHEL 7.3をベースとしたOracle Linux 7.3*2)では、systemdであるにも関わらずrcスクリプトを用いて構成しているので、これがOracle推奨なのであろうと判断*3し、これを流用してCentOS自動起動できるようにした。

手順

以下の手順はrootユーザで行う。

/etc/rc.d/init.d/oracle というファイルを作成し、以下のような記述にする(環境変数は適宜合わせる)。

#!/bin/sh
#
# chkconfig: 2345 99 99

#
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export ORACLE_HOME_LISTENER=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl start"
        su  oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
        ;;
  stop)
        su  oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl stop"
        ;;
  restart|reload)
        su  oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl stop"
        su  oracle -c "$ORACLE_HOME/bin/lsnrctl start"
        su  oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
        ;;
  status)
        $ORACLE_HOME/bin/lsnrctl status
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload}"
        exit 1
esac

exit 0

※XDB向けの設定(iptables)はよくわからない。無くても支障はなさそう*4

このスクリプトを実行可能にする。

# chmod 755 /etc/rc.d/init.d/oracle

このスクリプト自動起動対象として追加する。

# chkconfig --add oracle

/etc/oratab を編集し、自動起動したいインスタンスの行を「Y」にする。

orcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y


OSを再起動し、Oracle自動起動するかを確認する。

2017/9/6 追記

不要と思われる箇所を削除。oratabの編集について追記。

*1:OUIに自動起動オプション用意してほしいところではある

*2:/etc/redhat-release にはRed Hat Enterprise Linuxと書いてあるけど書き換えなくてよいのだろうか・・・

*3:単にOracleが手を抜いて過去のスクリプトを流用しているだけかもしれないが

*4:そもそもXDBが何か知らない・・・