三種關閉模式對比
| 模式 | 指令 | 行為 | 允許新連線 | 等待現有交易 | 執行 Checkpoint | 啟動恢復時間 | 推薦場景 |
| Normal | SHUTDOWN NORMAL | 禮貌關閉:拒絕新連線,等待**所有用戶主動斷線**並 Commit/Rollback | 否 | 是 (無限期) | 是 | 最短 (乾淨關閉) | 計畫性維護窗口、用戶配合度高 |
| Immediate | SHUTDOWN IMMEDIATE | **標準生產關閉**:拒絕新連線,**強制回滾**進行中交易、斷開所有 Session、Checkpoint、關閉檔案 | 否 | 否 (自動回滾) | 是 | 短 (Instance Recovery 僅回滾未完成交易) | **日常首選**、緊急維護、參數修改需重啟 |
| Abort | SHUTDOWN ABORT | **緊急斷電**:瞬間終止進程,**不 Checkpoint、不回滾、不關閉檔案** | 否 | 否 | 否 | **最長** (需 Instance Recovery: 前滾 Redo + 回滾 Undo) | 系統掛死、存儲故障、Abort 後立即啟動測試 |
標準關閉/啟動操作腳本 (生產環境標準化)
關閉腳本 stop_oracle.sh
#!/bin/bash
# 以 oracle 用戶執行
export ORACLE_SID=PROD
export ORACLE_HOME=/u01/app/oracle/product/19.0.0
export PATH=$ORACLE_HOME/bin:$PATH
echo "[$(date)] Stopping Listener..."
lsnrctl stop
echo "[$(date)] Shutting down database IMMEDIATE..."
sqlplus -s / as sysdba <
啟動腳本 start_oracle.sh
#!/bin/bash
export ORACLE_SID=PROD
export ORACLE_HOME=/u01/app/oracle/product/19.0.0
export PATH=$ORACLE_HOME/bin:$PATH
echo "[$(date)] Starting database..."
sqlplus -s / as sysdba <
進階:SRVCTL 管理 RAC/單實例 (11g+ 推薦)
# 單實例也可用 srvctl (需先配置)
srvctl stop database -d PROD -o immediate
srvctl start database -d PROD
# RAC 節點級
srvctl stop instance -d PROD -i PROD1 -o immediate
srvctl start instance -d PROD -i PROD1
OS 層面效能監控指令 (配合關閉前評估)
| 指令 | 用途 | 範例 |
sar -b | Buffer Cache 活動 (read/write hit ratio) | sar -b 5 10 |
sar -w | Context Switch / Swap 活動 | sar -w 5 10 |
sar -u | CPU 利用率細分 (user/sys/wio/idle) | sar -u 5 10 |
sar -r | 記憶體空閒/使用 | sar -r 5 10 |
sar -p | 分頁活動 (Solaris) | sar -p 5 10 |
vmstat 5 | 綜合: 進程、記憶體、分頁、I/O、CPU | vmstat 5 12 |
iostat -x 5 | 磁碟 I/O 細節 (await, svctm, %util) | iostat -x 5 12 |
swap -l / swap -s | Swap 空間使用 | swap -s |
常見誤區與避坑
- 慣用 Abort:導致下次啟動漫長 Instance Recovery,且可能遺漏 Redo 寫入損壞資料一致性。**嚴禁常態化使用**。
- Normal 等待過久:殭屍 Session (App Server 連線池未釋放) 導致關閉卡住 → 改用 Immediate。
- 未先停 Listener:新連線湧入干擾關閉流程,**標準順序:Listener → Database**。
- 參數檔遺失:啟動找不到 SPFILE/PFILE → 維護
spfile.ora 備份至異地。
結語
**SHUTDOWN IMMEDIATE 是生產環境的黃金標準** — 平衡安全性、速度與可預測性。將關閉/啟動封裝為冪等 Shell 腳本,納入 Ansible/Rundeck 自動化流程,配合 sar/vmstat/iostat 關閉前效能基線採集,讓每次維護窗口都可量化、可追溯、可復盤。