配置 Oracle 11gR2 在 CentOS6 上開機自啟動

seanlook發表於2015-05-13

修改配置

要達到oracle隨開機自啟動,一般使用11g自帶的dbstart指令碼:$ORACLE_HOME/bin/dbstart,但要先修改/etc/oratab的內容,將N改成Y,表示允許例項自啟動,假如有2個例項要啟動,再寫一行:

$ vi /etc/oratab
EXCRMPROD:/db/oracle/product/11.2.0/db_1:Y

然後在oracle使用者下執行$ORACLE_HOME/bin/dbstart即可啟動,日誌被記錄在$ORACLE_HOME/startup.log。但是,預設情況dbstartdbshut指令碼不能自動啟動或關閉監聽,所以也要加以修改:

$ vi /db/oracle/product/11.2.0/db_1/bin/dbstart
## 找到下面的程式碼(約第80行),在實際指令碼程式碼的前面
# First argument is used to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=$1
## 將此處的 ORACLE_HOME_LISTNER=$1 修改為 ORACLE_HOME_LISTNER=$ORACLE_HOME
if [ ! $ORACLE_HOME_LISTNER ] ; then
echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
echo "Usage: $0 ORACLE_HOME"
else
LOG=$ORACLE_HOME_LISTNER/listener.log

同樣也修改dbshut指令碼(約第50行):

$ vi /db/oracle/product/11.2.0/db_1/bin/dbshut

# The this to bring down Oracle Net Listener
ORACLE_HOME_LISTNER=$ORACLE_HOME
if [ ! $ORACLE_HOME_LISTNER ] ; then
echo "ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle Net Listener"
echo "Usage: $0 ORACLE_HOME"
else
LOG=$ORACLE_HOME_LISTNER/listener.log

開機啟動

這兩個指令碼在執行時會自動去搜尋/etc/oratab檔案的內容,將這兩個命令分別加入開機啟動和關閉指令碼里。

/etc/rc.local
Linux系統開機初始化的最後過程會執行該指令碼,加入以下內容:

su - oracle -lc "$ORACLE_HOME/bin/dbstart"

/etc/rc.local.shutdown
這個指令碼時系統裡沒有的,完成的功能是關機自動停止服務,/etc/rc.d/rc.local.shutdown

#!/bin/bash

# chkconfig: - 00 00
# description: Do custom commands before shutdown or reboot

### BEGIN INIT INFO
# Provides: custom-halt
# Required-Start:
# Required-Stop:
# Default-Start: 0 6
# Default-Stop:
# Short-Description: Custom halt commands
# Description: Do custom commands before shutdown or reboot
### END INIT INFO

export ORACLE_BASE=/db/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=EXCRMPROD
export PATH=$PATH:$ORACLE_HOME/bin

su - oracle -lc "$ORACLE_HOME/bin/dbshut /dev/null 2>&1"

exit

讓它執行在06執行級別runlevel:

# chmod 755 /etc/rc.d/rc.local.shutdown
# ln -s /etc/rc.d/rc.local.shutdown /etc/rc.local.shutdown
# ln -s /etc/rc.d/rc.local.shutdown /etc/init.d/custom-halt

# chkconfig --add custom-halt
# chkconfig --level 06 custom-halt on 

另外網上也有文章不是利用 oracle 自帶的 dbstart 來實現自啟動,而是自己寫 service 指令碼,執行 sqlplus 然後執行 shutdown immediate ,個人覺得這有點重複做oracle的事情了;還有把通過類似service oracle start/stop這樣的形式去管理,方便是方便一點,但要知道oracle資料庫輕易不會頻繁重啟,如有需要,我們更願意自己使用sqlplus連上資料庫,自己執行shutdown命令,因為對資料庫的操作還是以慎重為主,在配置了Active Data Guard等複雜環境下,對備庫也不適用,所以這裡就沒做這個工作。


原文連結地址:http://seanlook.com/2015/04/11/oracle_db_autostart_with_linux/


相關文章