linux下Oracle自動啟動與停止總結

tonywi888發表於2007-04-14

1、 修改Oracle系統配置檔案/etc/oratab
/etc/oratab 格式為: SID:ORACLE_HOME:AUTO
把AUTO域設定為Y(大寫),只有這樣,oracle 自帶的dbstart和dbshut才能夠發揮作用。我的為:ora10g:/home/oracle/products/10.2.0:Y
當然也可以不用oracle的指令碼,本例採用自己寫的指令碼,所以這一步可以略過。
2、 服務指令碼:(命名為oracle)
如下
#!/bin/bash
#
#
# Created by chenyongrui 2006-05-09
#

case "$1" in
start)
echo "Starting Oracle Databases ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Starting Oracle Databasee as part of system up." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - oracle -c "dbstart" >> /var/log/oracle (注 此處把我寫的啟動指令碼替換dbstart)
echo "Done."
echo "Starting Oracle Listeners ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Starting Oracle Listeners as part of system up." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle

;;
stop)
echo "Stoping Oracle Listeners ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Stoping Oracle Listener as part of system down." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."

rm -f /var/lock/subsys/oracle

echo "Stoping Oracle Databases ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Stoping Oracle Databases as part of system down." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - oracle -c "dbshut" >>/var/log/oracle (注 此處把我寫的關閉指令碼替換dbshut)
echo "Done."
echo ""
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle

;;
restart)
$0 stop
$0 start

;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac

將指令碼命名為oracle,儲存在/etc/rc.d/init.d下,當然也可使用其他名字,最後服務名跟著改變就可。
改變檔案屬性為:chmod 755 oracle


3、建立服務連線:

系統啟動時啟動資料庫,我們需要以下連結∶
$ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc5.d/S99oracle

注:此處只考慮在2 3 5三種執行方式下有效

要在重新啟動時停止資料庫,我們需要以下連結∶


$ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # 停止
$ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # 重新啟動


當然我們也可以使用chkconfig來增加oracle服務,具體實現如下
# cd /etc/rc.d/init.d/
# chkconfig --add oracle
# chkconfig --list oracle
oracle 0:0 ff 1:0 ff 2:0 ff 3:0 n 4:0 n 5:0 n 6:0 ff

linux系統啟動預設執行級別是5,所以runleve0是halt, runlevel6是reboot。 要在關機前執行指令碼,單純的將寫好的指令碼加到服務裡是不行的,在halt或reboot時,系統會檢查/var/lock/subsys下有沒有跟以K開頭的服務名一樣的檔案,如果有的話才會執行對應的指令碼。所以系統啟動是需要在/var/lock/subsys下建立跟服務名一樣的檔案,系統關機時才會執行服務的K指令碼。
如果服務啟動了,但是沒有在/var/lock/subsys下建立對應的檔案,系統關機時也不會執行服務對應的K指令碼的,系統執行S和K指令碼的條件可以看一下/etc/rc.d/rc指令碼,

rc This file is responsible for starting/stopping
# services when the runlevel changes.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-910635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章