萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Oracle ORA-01102 獨佔模式掛載失敗:鎖檔案、共享記憶體、信號量完整排查

錯誤現象

SQL> startup
ORACLE instance started.
...
ORA-01102: cannot mount database in EXCLUSIVE mode

根因分析

資料庫異常關機(掉電、kill -9、OS 崩潰)導致下列資源未正確釋放:

  1. 鎖檔案 $ORACLE_HOME/dbs/lk<SID> 仍被進程持有。
  2. 共享記憶體段(ipcs -m)殘留。
  3. 信號量陣列(ipcs -s)殘留。
  4. 背景進程(SMON、PMON、DBWn 等)未退出。
  5. sgadef<SID>.dbf 檔案殘留。

分步排查與清理

1. 檢查並釋放鎖檔案

cd $ORACLE_HOME/dbs
fuser -u lkORCL   # 顯示持有進程 PID 與用戶
fuser -k lkORCL   # 強制殺掉所有持有進程
rm -f lkORCL      # 刪除鎖檔

2. 清理共享記憶體

ipcs -m | grep oracle
ipcrm -m    # 逐個刪除 oracle 擁有的段

3. 清理信號量

ipcs -s | grep oracle
ipcrm -s 

4. 殺殘留進程

ps -ef | grep ora_ | grep -v grep
kill -9 

5. 刪除 sgadef 檔案

rm -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.dbf

驗證啟動

SQL> startup
Database mounted.
Database opened.

HA 環境額外檢查

若為 RAC/Data Guard,先確認其他節點未啟動同一資料庫實例(共享存儲只能單節點掛載 EXCLUSIVE)。

預防建議

  • 使用 shutdown immediate 正常關閉,避免 shutdown abort。
  • 配置 Oracle Restart (CRS) 自動管理實例生命週期。
  • 監控 lk*、共享記憶體、信號量殘留,異常時告警。
copyright © 萬盛學電腦網 all rights reserved