首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Linux 下將 Oracle 設為系統服務自動啟動的兩種方法

     編輯:Oracle 資料庫基礎

前言

在 Linux 伺服器上部署 Oracle 資料庫後,將其註冊為系統服務並設定開機自動啟動,是確保高可用性的基本運維工作。本文介紹兩種主流做法:使用 Oracle 內建 dbstart/dbshut 腳本,以及自行撰寫啟停腳本。

方法一:使用 Oracle 內建 dbstart/dbshut

1. 修改 /etc/oratab

以 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

2. 修正 $ORACLE_HOME/bin/dbstart

找到 ORACLE_HOME_LISTNER= 行,修正為實際路徑或直接使用環境變數:

ORACLE_HOME_LISTNER=$ORACLE_HOME

3. 測試腳本

su - oracle
cd $ORACLE_HOME/bin
./dbstart          # 啟動資料庫與監聽
ps -ef | grep ora_ # 確認資料庫進程
lsnrctl status     # 確認監聽狀態
./dbshut           # 關閉資料庫(監聽需手動停止)

4. 修正日誌檔權限

執行過 dbstart/dbshut 後會自動產生 startup.log、shutdown.log,需將擁有者改為 oracle:

chown oracle:oinstall $ORACLE_HOME/startup.log
chown oracle:oinstall $ORACLE_HOME/shutdown.log

5. 建立 System V 服務腳本

以 root 在 /etc/rc.d/init.d/oracle 建立啟動腳本(兩種版本擇一):

腳本 A:啟動資料庫、監聽、DB Console、iSQL*Plus
#!/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

6. 註冊並啟用服務

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

7. 驗證與手動控制

service oracle start
service oracle stop
ps -ef | grep ora_

方法二:自建啟停腳本(更彈性)

1. 建立啟停腳本

mkdir -p /home/oracle/bin
cd /home/oracle/bin

# startora
cat > startora <<'EOF'
sqlplus /nolog < stopora <<'EOF'
sqlplus /nolog <

2. 建立服務腳本並註冊

在 /etc/rc.d/init.d/oracle 撰寫呼叫上述腳本的服務腳本,chkconfig 註冊方式同方法一。

關鍵參數說明

  • # chkconfig: 345 80 10:
    345 = 運行等級(多用戶、圖形介面);
    80 = 啟動優先序(數字越小越早);
    10 = 關閉優先序(數字越小越早)。
  • runlevel 對應:
    0 關機、1 單用戶、3 多用戶字元、5 多用戶圖形、6 重啟。

總結

方法一利用 Oracle 官方腳本,維護性較好;方法二自訂腳本,適合需額外邏輯(如備份、檢查)的場景。無論採哪種,務必在測試環境完整驗證啟動、關機、重啟流程後再上線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved