在 Linux 伺服器上部署 Oracle 資料庫後,將其註冊為系統服務並設定開機自動啟動,是確保高可用性的基本運維工作。本文介紹兩種主流做法:使用 Oracle 內建 dbstart/dbshut 腳本,以及自行撰寫啟停腳本。
以 oracle 用戶編輯 /etc/oratab,將實例啟動標誌從 N 改為 Y:
# 修改前
orcl:/u01/app/oracle/product/10.2.0/db_1:N
# 修改後
orcl:/u01/app/oracle/product/10.2.0/db_1:Y
找到 ORACLE_HOME_LISTNER= 行,修正為實際路徑或直接使用環境變數:
ORACLE_HOME_LISTNER=$ORACLE_HOME
su - oracle
cd $ORACLE_HOME/bin
./dbstart # 啟動資料庫與監聽
ps -ef | grep ora_ # 確認資料庫進程
lsnrctl status # 確認監聽狀態
./dbshut # 關閉資料庫(監聽需手動停止)
執行過 dbstart/dbshut 後會自動產生 startup.log、shutdown.log,需將擁有者改為 oracle:
chown oracle:oinstall $ORACLE_HOME/startup.log
chown oracle:oinstall $ORACLE_HOME/shutdown.log
以 root 在 /etc/rc.d/init.d/oracle 建立啟動腳本(兩種版本擇一):
#!/bin/bash
# chkconfig: 345 80 10
# description: Startup Script for Oracle Databases
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/product
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]; then
echo "Oracle startup: cannot start"
exit 1
fi
case "$1" in
start)
echo -n "Starting Oracle: "
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/oracle
su - $ORA_OWNR -c "$ORACLE_HOME/bin/emctl start dbconsole"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/isqlplusctl start"
echo "OK"
;;
stop)
echo -n "Shutting down Oracle: "
su - $ORA_OWNR -c "$ORACLE_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/isqlplusctl stop"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbshut"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
rm -f /var/lock/subsys/oracle
echo "OK"
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart|reload"
exit 1
;;
esac
exit 0
腳本 B:僅啟動資料庫與監聽(輕量版)
#!/bin/bash
# chkconfig: 345 80 10
# description: Startup Script for Oracle Databases
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/product
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
case "$1" in
start)
su oracle -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/oracle
echo "OK"
;;
stop)
echo -n "Shutting down Oracle: "
su oracle -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/oracle
echo "OK"
;;
*)
echo "Usage: $0 start|stop"
exit 1
;;
esac
exit 0
chown oracle:oinstall /etc/rc.d/init.d/oracle
chmod 755 /etc/rc.d/init.d/oracle
chkconfig --add oracle
# 或指定 runlevel
chkconfig --level 345 oracle on
chkconfig --list oracle
# 預期輸出:oracle 0:off 1:off 2:off 3:on 4:on 5:on 6:off
service oracle start
service oracle stop
ps -ef | grep ora_
mkdir -p /home/oracle/bin
cd /home/oracle/bin
# startora
cat > startora <<'EOF'
sqlplus /nolog < stopora <<'EOF'
sqlplus /nolog <
在 /etc/rc.d/init.d/oracle 撰寫呼叫上述腳本的服務腳本,chkconfig 註冊方式同方法一。
# chkconfig: 345 80 10:runlevel 對應:方法一利用 Oracle 官方腳本,維護性較好;方法二自訂腳本,適合需額外邏輯(如備份、檢查)的場景。無論採哪種,務必在測試環境完整驗證啟動、關機、重啟流程後再上線。