基本的なブートの機構に関しては、 「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