基本的なブートの機構に関しては、 「unix 講座」の入門のブートを参照ください。
oracle データベースを自動起動停止するスクリプトは、dbora として作ります。
また複数のデータベースを制御するための制御テーブルとして oratab を使います。 oratab の場所は、OS により以下のように異なります。
| OS 名 | oratab のディレクトリ名 |
|---|---|
| solaris/Linux | /var/opt/oracle/oratab |
| AIX/HP-UX/Tru64/Miracle | /etc/oratab |
dbora では、データベースとデフォルトのリスナを起動停止します。 それ以外に必要なものがあれば、 dbora に追加してください。 その場合は、正しく動作することを確認する必要があります。 dbora はオラクル社からは提供されませんが、 サンプルがあります。
# dbora start 起動 # dbora stop 停止
以下に OS により異なる事項を書きます。
| ディレクトリ | 説 明 |
|---|---|
| /etc/init.d | dbora を格納します |
| /etc/rc0.d | /etc/init.d/dbora を K10dbora にシンボリックリンクします:自動停止 |
| /etc/rc2.d | /etc/init.d/dbora を S99dbora にシンボリックリンクします:自動起動 |
設定の手順は、以下のとおりです。
| ディレクトリ | 説 明 |
|---|---|
| /sbin/init.d | dbora を格納します |
| /sbin/rc0.d | /sbin/init.d/dbora を K10dbora にシンボリックリンクします:自動停止 |
| /sbin/rc2.d | /sbin/init.d/dbora を S99dbora にシンボリックリンクします:自動起動 |
設定の手順は、以下のとおりです。
| ディレクトリ | 説 明 |
|---|---|
| /etc/rc.d/init.d | dbora を格納します |
| /etc/rc.d/rc0.d | chkconfig で /etc/init.d/dbora を K10dbora にシンボリックリンクします:自動停止 |
| /etc/rc.d/rc5.d | chkconfig で /etc/init.d/dbora を S99dbora にシンボリックリンクします:自動起動 |
LINUX のランレベルは次のようになります。
| ランレベル | 説 明 |
|---|---|
| 0 | 停止 |
| 1 | シングルユーザーモード |
| 2 | 未使用(ユーザー定義可能) |
| 3 | 完全マルチユーザーモード |
| 4 | 未使用(ユーザー定義可能) |
| 5 | 完全マルチユーザーモード(Xベースのログイン画面) |
| 6 | 再ブート |
設定の手順は、以下のとおりです。
ランレベルへの登録、削除は、chkconfig ユーティリティで行います。
dbora を /etc/rc.d/init.d に置き、先頭に chkconfig への設定を入れます。 それは、ランレベル、起動時のプライオリティ、停止時のプライオリティで、 コメントとして入れます。
# chkconfig: 5 99 10
説明
5 : runlevel 5
99 : start priority
10 : stop priority
> chkconfig --add dbora > chkconfig --list dbora dbora 0:off 1:off 2:off 3:off 4:off 5:on 6:off
以下が oracle 8.1.7 の dbora です。
#!/bin/sh
#
# chkconfig: 5 99 10
# description: Oracle Database Server
# processname: ora_
#
# dbora This shell script takes care of starting and stopping
# Oracle Database Server.
SUBSYS=/var/lock/subsys/dbora
ORATAB=/etc/oratab
dbora_init() {
# get ORACLE_HOME from the first entry,
# whose 3rd field is Y, in $ORATAB.
if [ ! -f $ORATAB ]
then
echo "auto startup/shudown of Oracle: $ORATAB does not exist."
exit 1
fi
ORA_HOME=`awk -F: '/^[^#:]+:.+:[Y]$/ { print $2; exit}' $ORATAB`
if [ x$ORA_HOME = "x" ]; then
echo "There is not Y entry in $ORATAB ."
exit 1
fi
# get oracle's owner from owner of dbstart.
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "auto startup/shudown of Oracle: Oracle may not be installed" \
"correctly."
exit 1
fi
ORA_OWNER=`ls -l $ORA_HOME/bin/dbstart | awk '{print $3}'`
}
case "$1" in
'start')
if [ -f $SUBSYS ]; then
echo $0 alredy started.
exit 1
fi
dbora_init
# Start the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
# Start Intelligent Agent and Oracle Management Server
# --- for Oracle9i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl start"
# su - $ORA_OWNER -c "$ORA_HOME/bin/oemctl start oms"
# --- for Oracle8i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_start"
# su - $ORA_OWNER -c "$ORA_HOME/bin/oemctrl start oms"
# --------------------
# Start the Oracle HTTP Server
# This is a BUG workaround. $ORACLE_HOME/Apache/Jserv/etc
# /jserv.properties needs DISPLAY.
# test -z "$DISPLAY" && export DISPLAY=":60000.0"
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl start"
# --------------------
touch $SUBSYS
;;
'stop')
if [ ! -f $SUBSYS ]; then
echo $0 alredy stopped.
exit 1
fi
dbora_init
# Stop Intelligent Agent
# --- for Oracle9i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/agentctl stop"
# --- for Oracle8i ---
# su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl dbsnmp_stop"
# --------------------
# Stop the Oracle HTTP Server
# su - $ORA_OWNER -c "$ORA_HOME/Apache/Apache/bin/apachectl stop"
# --------------------
# Stop the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"
rm -f $SUBSYS
;;
'restart')
$0 stop
$0 start
;;
'status')
if [ -f $SUBSYS ]; then
echo $0 started.
else
echo $0 stopped.
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0