在企業級生產環境中,Oracle 資料庫伺服器重啟後若能自動拉起多個實例,將大幅降低運維成本並提高服務可用性。本文將系統介紹兩種最常用的 Oracle 多實例自動啟動方案,涵蓋手動腳本啟動與開機自啟動配置,並說明監聽器與 Enterprise Manager 的同步啟動策略。
適用於需要靈活控制啟動順序、或在維護窗口逐個拉起實例的場景。核心邏輯是透過切換 ORACLE_SID 環境變數,依次以 SYSDBA 身分連線並執行 STARTUP。
export ORACLE_SID=DB1
sqlplus '/as sysdba' <
lsnrctl start listener1、lsnrctl start listener2……可先用 lsnrctl status 確認配置文件位置再編輯。lsnrctl start 啟動預設監聽器。export ORACLE_SID=DB1
emctl start dbconsole
其他實例同理,逐個切換 SID 執行即可。
利用 Oracle 內建的 dbstart/dbshut 搭配 /etc/oratab 實現隨作業系統自動拉起/關閉所有標記為 Y 的實例。
將需自啟動實例的第三欄位從 N 改為 Y,或一次性執行:
:g/N/s//Y/g
#!/bin/bash
case "$1" in
start)
date >>/var/log/Oracle
echo -e "\nThe Oracle will start\n" >/var/log/Oracle
su - oracle -c "lsnrctl start; dbstart; emctl start dbconsole; exit;" >>/var/log/Oracle
echo -e "The Oracle started" >>/var/log/Oracle
;;
stop)
date >>/var/log/Oracle
echo -e "\nThe Oracle will stop\n" >/var/log/Oracle
su - oracle -c "dbshut; emctl stop dbconsole; lsnrctl stop; exit;" >>/var/log/Oracle
echo -e "The Oracle stoped" >>/var/log/Oracle
;;
restart)
$0 stop
$0 start
;;
*)
echo -e "usage $0 {start|stop|restart}"
exit 1
;;
esac
chmod +x Oracle.sh
ln -s Oracle.sh /etc/rc.d/rc3.d/S99Oracle
ln -s Oracle.sh /etc/rc.d/rc5.d/S99Oracle
ln -s Oracle.sh /etc/rc.d/rc0.d/K01Oracle
ln -s Oracle.sh /etc/rc.d/rc6.d/K01Oracle
其中 S99 代表啟動順序較晚(確保網路、儲存就緒),K01 代表關機最先停止資料庫。
oratab 路徑在 Solaris/AIX 可能為 /var/opt/oracle/oratab,請以實際環境為準。dbstart 會讀取 ORACLE_HOME_LISTNER 環境變數啟動監聽器,若未設定則啟動預設 LISTENER。/var/log/Oracle 方便排查,建議定期輪轉。方法一適合臨時維護、升級驗證;方法二才是生產環境「設定後即忘記」的標準做法。配合 oratab 與標準 init 腳本,即可實現多實例、監聽器、EM 的全自動生命週期管理。