Thursday, June 28, 2007

[Linux] dbshut スクリプトが動作しない

[概要]
Linux 環境でシステム停止・起動時に、自動的に Oracle データベースを
起動・停止できるように dbstart および dbshut スクリプトを使用しています。
システム再起動時に dbshut スクリプトが動作せず、自動的にデータベースが
停止しません。


[対象リリース]
すべて


[対象プラットフォーム]
Linux


[詳細]
下記の点を確認してください

1. dbora が実行権限を持っているかどうか

例:chmod +x /etc/rc.d/init.d/dbora

2. /etc/rc.d/rcX.d から リンクが正常に張られているかどうか
 
例:/etc/rc.d/rc6.d/K01dbora -> ../init.d/dbora ( multi user mode)
/etc/rc.d/rc0.d/K01dbora -> ../init.d/dbora (single user mode)

3. 手動でスクリプトを実行してデータベースの停止が可能であるか

例:/etc/rc.d/rc6.d/K01dbora stop

4. /etc/rc.d/init.d/dbora に touch /var/lock/subsys/dbora という
 一行が含まれているかどうか

'inittab' から呼び出されるスクリプトは '/var/lock/subsys' 以下の
lock file の存在を探します。このファイルが存在していないと stop command
が実行されません。下記のような形で touch /var/lock/subsys/dbora という
一行を付け加える必要があります。


[変更前]
- 9i 用 dbora

#Start the database

su - $ORA_OWNER -c $ORA_HOME/bin/dbstart

- 10g 用 dbora

#
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
#


[変更後]
- 9i 用 dbora

#Start the database

touch /var/lock/subsys/dbora
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart

touch /var/lock/subsys/dbora が必要になるのは、
#Start the database のときだけです。stop には必要ありません。

- 10g 用 dbora

#
if [ ! "$2" = "ORA_DB" ] ; then
if [ "$PLATFORM" = "HP-UX" ] ; then
remsh $HOST -l $ORACLE -n "$0 $1 ORA_DB"
exit
else
touch /var/lock/subsys/dbora <===(*)
rsh $HOST -l $ORACLE $0 $1 ORA_DB
exit
fi
fi
#

一度 dbora が実行されると、作成された '/var/lock/subsys/dbora' は
OS 側で OS 停止時や再起動時に削除されます。


[参照情報]
Oracle9i for UNIX Systems インストレーション・ガイド リリース2(9.2.0.1.0)部品番号: J06455-01
p4-5 データベースの起動および停止の自動化

Oracle Database 管理者リファレンス 10g リリース1(10.1)for UNIX Systems 部品番号: B13705-04
p2-10 その他のオペレーティング・システムにおけるデータベースの起動と停止の自動化


[更新履歴]
2005/06/17 10g 用 dbora の記述を追加
2004/05/13 本文書作成

No comments: