首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料庫關閉模式完整指南:Normal vs Immediate vs Abort 差異與操作範例

     編輯:Oracle 資料庫相關知識

三種關閉模式對比

模式指令行為允許新連線等待現有交易執行 Checkpoint啟動恢復時間推薦場景
NormalSHUTDOWN NORMAL禮貌關閉:拒絕新連線,等待**所有用戶主動斷線**並 Commit/Rollback否是 (無限期)是最短 (乾淨關閉)計畫性維護窗口、用戶配合度高
ImmediateSHUTDOWN IMMEDIATE**標準生產關閉**:拒絕新連線,**強制回滾**進行中交易、斷開所有 Session、Checkpoint、關閉檔案否否 (自動回滾)是短 (Instance Recovery 僅回滾未完成交易)**日常首選**、緊急維護、參數修改需重啟
AbortSHUTDOWN 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 -bBuffer Cache 活動 (read/write hit ratio)sar -b 5 10
sar -wContext Switch / Swap 活動sar -w 5 10
sar -uCPU 利用率細分 (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、CPUvmstat 5 12
iostat -x 5磁碟 I/O 細節 (await, svctm, %util)iostat -x 5 12
swap -l / swap -sSwap 空間使用swap -s

常見誤區與避坑

  1. 慣用 Abort:導致下次啟動漫長 Instance Recovery,且可能遺漏 Redo 寫入損壞資料一致性。**嚴禁常態化使用**。
  2. Normal 等待過久:殭屍 Session (App Server 連線池未釋放) 導致關閉卡住 → 改用 Immediate。
  3. 未先停 Listener:新連線湧入干擾關閉流程,**標準順序:Listener → Database**。
  4. 參數檔遺失:啟動找不到 SPFILE/PFILE → 維護 spfile.ora 備份至異地。

結語

**SHUTDOWN IMMEDIATE 是生產環境的黃金標準** — 平衡安全性、速度與可預測性。將關閉/啟動封裝為冪等 Shell 腳本,納入 Ansible/Rundeck 自動化流程,配合 sar/vmstat/iostat 關閉前效能基線採集,讓每次維護窗口都可量化、可追溯、可復盤。

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