LinuxにおけるOracle自動起動の設定方法(10gR2)

Windowsでは、OSを起動するとOracleも自動的に起動するようになっていますが、
Linux/UNIXではいくつかの設定が必要です。
自動起動ができない原因の多くは、設定のミスにあります。

自動起動の仕組みを理解する
 正しく設定するためには、自動起動の仕組みを理解する必要があります。
自動起動に関連するファイルは次の4つです。
1から3がOracleに含まれていて、4はユーザーが作成します。
(ただしMIRACLE LINUXにはすでに付属しています。)

   1. $ORACLE_HOME/bin/dbstart DB起動スクリプト
   2. $ORACLE_HOME/bin/dbstop DB停止スクリプト
   3. /etc/oratab インスタンスの定義ファイル
   4. /etc/rc.d/init.d/dbora サービスのスクリプト
1、/etc/oratabを編集する
「SID:$ORACLE_HOME:Y」の通り変更します。
例:
Ora10gTest:/u01/oracle/app/oracle/product/10.2.0/db_1:Y
2、dboraスクリプトを作成する
 MIRACLE LINUXでははじめからdboraが付属していますが、Red Hat Linuxでは自分で作成する必要があります。

#!/bin/sh   
   
# chkconfig: 2345 99 10
# description: starts and stops oracle instances

# Set ORA_HOME to be equivalent to the $ORACLE_HOME   
# from which you wish to execute dbstart and dbshut;   
#   
# Set ORA_OWNER to the user id of the owner of the   
# Oracle database in ORA_HOME.   
   
ORA_HOME=/u01/oracle/app/oracle/product/10.2.0/db_1  
ORA_OWNER=oracle   
export ORACLE_HOME=$ORA_HOME   
   
if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]   
then   
        echo "Oracle startup: cannot start"   
        exit   
fi   
   
case "$1" in   
        start)   
                # Start the Oracle databases:   
                su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"   
                # Start Oracle Net   
                su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"   
                # Start emctl   
                su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"   
   
                touch /var/lock/subsys/dbora   
                ;;   
   
        stop)   
                # Stop Oracle Net   
                su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"   
                # Stop the Oracle databases:   
                su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"   
                # Stop emctl   
                su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"   
   
                rm -f /var/lock/subsys/dbora   
                ;;   
        restart)   
                $0 stop   
                $0 start   
                ;;   
        status)   
                if [ -f /var/lock/subsys/dbora ]; then   
                echo $0 started.   
                else   
                echo $0 stopped.   
                fi   
                ;;   
        *)   
                echo "usage: dbora {start|stop|restart|status}"   
                exit 1   
esac   
   
exit 0   

注意:起動するのはデータベース、リスナーとEMです、個人的にEMいらないなら、emctlの行をコメントアウトしてください
3、dboraをOSに登録する
先ほど作成したスクリプトをchkconfigコマンドが認識可能なディレクトリへコピーします。
# cp dbora /etc/rc.d/init.d/
# chmod 755 /etc/rc.d/init.d/dbora

作成したスクリプトに下記の行が含まれています。
# chkconfig: 2345 99 10
# description: starts and stops oracle instances
これはchkconfigコマンド用の設定です。
・ランレベル2,3,4,5にS99dboraスクリプトを生成する
・ランレベル0,1,6にK10dboraスクリプトを生成する
を意味します。
# chkconfig --add dbora

確認してみると、全て配置済みです。
[root@Ora10gTest ~]# find /etc/rc.d/ -name S99dbora
/etc/rc.d/rc2.d/S99dbora
/etc/rc.d/rc3.d/S99dbora
/etc/rc.d/rc4.d/S99dbora
/etc/rc.d/rc5.d/S99dbora
[root@Ora10gTest ~]# find /etc/rc.d/ -name K10dbora
/etc/rc.d/rc1.d/K10dbora
/etc/rc.d/rc6.d/K10dbora
/etc/rc.d/rc0.d/K10dbora

[root@Ora10gTest ~]# chkconfig --list dbora
dbora           0:off   1:off   2:on    3:on    4:on    5:on    6:off
4、dbstartバグ修正

上記のままでDBを起動してみると
[root@Ora10gTest ~]# /etc/rc.d/init.d/dbora start

Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr
Processing Database instance "Ora10gTest": log file /u01/oracle/app/oracle/product/10.2.0/db_1/startup.log
のようなエラーが出ます。

$ORACLE_HOME/bin/dbstartを修正することで解消します
旧78行目:ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
新78行目:ORACLE_HOME_LISTNER=$ORACLE_HOME