Oracle10gの自動インスタンス起動(Solaris9対応版)

先週から自動起動に悪戦苦闘中。
形になってきたので、覚書としてまとめておく。


参考にしたページ
http://otndnld.oracle.co.jp/document/products/oracle10g/102/unix/B19278-05/strt_stp.htm#403224
OS の起動時に Oracle を起動する - オラクル・Oracleをマスターするための基本と仕組み

自動起動対象インスタンスの指定

rootユーザでログインし、/var/opt/oracle/oratab を編集する。
中身はこんな感じになっていて、$ORACLE_SID:$ORACLE_HOME:[N|Y]の構成。

orcl:/usr/local/oracle/product/10.2.0/Db_1:N
orcl2:/usr/local/oracle/product/10.2.0/Db_1:N

→ 自動起動の対象を、「N」から「Y」に変更

このファイルを修正すると、$ORACLE_HOME/bin/dbstartで起動できるようになる。
(ただしdbstartはデフォルトではうまく動かないので修正が必要:後述)

自動起動スクリプトの作成

/etc/init.d/dboraを新規作成する。
ファイルの内容は以下の通り。
6行目のORACLE_HOMEを自環境のORACLEホーム、
11行目のORACLEORACLEユーザにあわせておくのを忘れずに!

#! /bin/sh  -x
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.

ORACLE_HOME=/usr/local/oracle/product/10.2.0/Db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle

PATH=${PATH}:$ORACLE_HOME/bin
HOST=`hostname`
PLATFORM=`uname`
export ORACLE_HOME PATH
#
if [ ! "$2" = "ORA_DB" ] ; then
   if [ "$PLATFORM" = "HP-UX" ] ; then
      remsh $HOST -l $ORACLE -n "$0 $1 ORA_DB"
      exit
   else
      rsh $HOST -l $ORACLE $0 $1 ORA_DB
      exit
   fi
fi
#
case $1 in
'start')
        $ORACLE_HOME/bin/dbstart $ORACLE_HOME &
        ;;
'stop')
        $ORACLE_HOME/bin/dbshut $ORACLE_HOME &
        ;;
*)
        echo "usage: $0 {start|stop}"
        exit
        ;;
esac
#
exit

作成したら、chmod 755 で実行可能にしておく。
オーナーやグループを変えるという話もあるが、しなくても他ユーザから実行できればOKのようだ。

dbstart, dbshutの修正

Oracleに付属しているシェルがそのままでは動かない(!)ので修正が必要。


$ORACLE_HOME/bin/dbstartを修正。
対象は4箇所。

1行目にシェル指定を追加
#!/bin/bash

ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
 ↓ 以下に変更
ORACLE_HOME_LISTNER=$1

ORATAB=/etc/oratab
 ↓ 以下に変更
ORATAB=/var/opt/oracle/oratab

export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cu
t -d' ' -f5 | cut -d'.' -f1`
 ↓ 以下に変更
VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' '
-f5 | cut -d'.' -f1`
export VER10LIST


$ORACLE_HOME/bin/dbshutを修正。
こちらは1箇所。
私の環境ではoratabのパスは/var配下になっていたので修正してないけど、
環境と一致しているか確認が必要。

1行目にシェル指定を追加
#!/bin/bash

dboraの起動確認

ここまで修正したら、作成したスクリプトが実行できるか確認する。
rootユーザで、

# /etc/init.d/dbora start
# /etc/init.d/dbora stop

エラーが出なければOK。
いろいろ出力されて見にくいけれど、うまくいけばstartおよびshutdownのログが表示される。

自動起動の設定

rootユーザで以下のコマンドを入力。
リンクが作成される。

# ln -s /etc/init.d/dbora /etc/rc3.d/K01dbora
# ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora

動作確認

# shutdown -y -g0 -i6

でリブートする。
$ORACLE_HOME直下のstartup.log、shutdown.logを確認し、問題なければOK。