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

Oracle 啟動三階段深度解析:NOMOUNT → MOUNT → OPEN 內部機制與故障診斷

     編輯:Oracle 資料庫基礎

Oracle 啟動過程分為 **NOMOUNT → MOUNT → OPEN** 三個階段,每階段完成特定的元數據讀取、記憶體結構建立、檔案一致性檢查。理解各階段內部機制、關鍵檔案依賴、常見失敗點與恢復對策,是 DBA 排查啟動故障、執行災難恢復的核心能力。本文系統拆解三階段流程、關鍵視圖、典型錯誤碼與處理邏輯。

階段總覽

階段命令核心動作關鍵檔案主要風險點
NOMOUNTSTARTUP NOMOUNT讀取參數檔 → 配置 SGA → 啟動背景進程 (PMON/SMON/DBWn/LGWR/CKPT/ARCn...) → 開啟 ALERT LOG → 動態註冊到監聽器SPFILE/PFILE參數檔缺失/損壞、記憶體不足、端口衝突
MOUNTALTER DATABASE MOUNT讀取控制檔 (control_files 參數) → 驗證控制檔一致性 → 讀取數據檔/Redo 路徑、資料庫名、SCN、歸檔模式、字元集控制檔 (.ctl)控制檔缺失/不一致/權限、路徑錯誤
OPENALTER DATABASE OPEN線上開啟所有數據檔/Redo → 檢查 SCN 一致性 → 執行實例恢復 (如需) → 開啟臨時檔 → 允許用戶連線數據檔 (.dbf)、Redo (.log)、臨時檔數據檔缺失/離線/SCN 不一致/介質故障

階段一:NOMOUNT 詳解

參數檔尋找順序

1. $ORACLE_HOME/dbs/spfileSID.ora
2. $ORACLE_HOME/dbs/spfile.ora
3. $ORACLE_HOME/dbs/initSID.ora
4. $ORACLE_HOME/dbs/init.ora

可用 STARTUP PFILE=/custom/path/init.ora 指定。

關鍵背景進程啟動順序

  1. PMON (Process Monitor) — 最先啟動,負責清理失敗進程
  2. SMON (System Monitor) — 實例恢復、臨時段清理
  3. DBWn (Database Writer) — 髒塊寫入數據檔
  4. LGWR (Log Writer) — Redo 寫入線上日誌
  5. CKPT (Checkpoint) — 觸發檢查點
  6. ARCn (Archiver) — 若歸檔模式
  7. MMAN/MMNL/MMON — 記憶體管理、AWR 收集

常見失敗與處理

錯誤原因處理
ORA-01078: failure in processing system parameters參數檔語法錯/參數值非法檢查 ALERT LOG 具體參數,建立 PFILE 修正後 STARTUP PFILE=...
ORA-00845: MEMORY_TARGET not supported/dev/shm 太小mount -o remount,size=4G /dev/shm 或降低 MEMORY_TARGET
ORA-27123: unable to attach to shared memory共享記憶體段衝突/不足ipcs -m 清理舊段、檢查 /etc/sysctl.conf shmmax/shmall
LRM-00109: could not open parameter file找不到參數檔確認 ORACLE_SID、檔案存在、權限

階段二:MOUNT 詳解

控制檔讀取與驗證

  • 讀取 control_files 參數指定的所有控制檔 (多路鏡像)
  • **任一控制檔讀取失敗 → MOUNT 失敗**
  • 驗證多路控制檔內容一致 (檢查點 SCN、資料庫 ID、檔案清單)

常見失敗與處理

錯誤原因處理
ORA-00205: error in identifying control file控制檔路徑錯/檔案不存在/權限檢查 control_files 參數、OS 層面確認檔案、從備份恢復控制檔
ORA-00202: control file: '...' not found多路鏡像缺失複製現有控制檔補齊、或修改參數移除缺失路徑
ORA-01122: database file 1 failed verification控制檔記錄的數據檔與實際不符檢查數據檔是否被移動/刪除,必要時 RENAME FILE 或恢復

控制檔恢復標準流程

-- 1. NOMOUNT 階段
STARTUP NOMOUNT;

-- 2. 從備份恢復控制檔 (RMAN)
RMAN> RESTORE CONTROLFILE FROM '/backup/controlfile.bkp';
-- 或 SQL*Plus (有備份控制檔複製)
SQL> ALTER DATABASE MOUNT;  -- 若有一個可用控制檔

-- 3. 開啟資料庫 (可能需 RESETLOGS)
SQL> ALTER DATABASE OPEN RESETLOGS;  -- 若控制檔為備份版本

階段三:OPEN 詳解

檔案一致性檢查與實例恢復

  1. 讀取控制檔中記錄的所有數據檔/Redo 路徑
  2. 檢查每個檔案 Header 中的 **檢查點 SCN** 與控制檔記錄是否一致
  3. **一致** → 標記 ONLINE,正常開啟
  4. **不一致** (SCN 落後) → 需要**實例恢復**:
    • SMON 讀取線上 Redo,從檢查點 SCN 向前應用
    • 前滾: 重做已提交/未提交交易
    • 回滾: 撤銷未提交交易 (利用 Undo)
  5. 開啟臨時表空間檔案
  6. 標記資料庫 OPEN,允許用戶連線

常見失敗與處理

錯誤原因處理
ORA-01157: cannot identify/lock data file數據檔缺失/離線/權限檢查 OS 檔案、ALTER DATABASE DATAFILE ... ONLINE、從備份恢復
ORA-01110: data file 1: '...'配合上述錯誤顯示具體檔案同上
ORA-01122: database file 1 failed verification檔案 Header SCN 不匹配 (可能恢復不完整)RECOVER DATABASE / RECOVER DATAFILE ... / RECOVER TABLESPACE ...
ORA-00313: open failed for members of log groupRedo 日誌組成員缺失/損壞ALTER DATABASE CLEAR LOGFILE GROUP n / 恢復 Redo
ORA-01589: must use RESETLOGS or NORESETLOGS非正常關閉/介質恢復後需指定ALTER DATABASE OPEN RESETLOGS (會重置 Redo 序列、需完整備份後)

故障診斷黃金法則

  1. 先看 ALERT LOG:tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log — 完整錯誤堆疊、時間序列
  2. 確認當前階段:SELECT STATUS FROM V$INSTANCE; (STARTED/MOUNTED/OPEN)
  3. 按階段依賴檔案排查:NOMOUNT→參數檔,MOUNT→控制檔,OPEN→數據檔/Redo
  4. 最小化損失原則:優先嘗試 RECOVER、CLEAR LOGFILE、ONLINE DATAFILE,最後才 RESETLOGS
  5. 備份優先:任何 RESETLOGS/恢復操作前,確保有可用備份 (RMAN/OS 複製)

進階:啟動觸發器自動化檢查

CREATE OR REPLACE TRIGGER sys.startup_check
AFTER STARTUP ON DATABASE
DECLARE
  v_cnt NUMBER;
BEGIN
  -- 檢查無效物件
  SELECT COUNT(*) INTO v_cnt FROM dba_objects WHERE status = 'INVALID';
  IF v_cnt > 0 THEN
    DBMS_OUTPUT.PUT_LINE('WARNING: ' || v_cnt || ' invalid objects after startup');
    -- 可發送郵件告警
  END IF;
  -- 檢查表空間使用率
  FOR t IN (SELECT tablespace_name, round(used_pct) pct FROM dba_tablespace_usage_metrics WHERE used_pct > 85) LOOP
    DBMS_OUTPUT.PUT_LINE('ALERT: Tablespace ' || t.tablespace_name || ' ' || t.pct || '% used');
  END LOOP;
END;
/
-- 啟用: ALTER TRIGGER sys.startup_check ENABLE;

精通三階段內部機制,配合 ALERT LOG、V$ 視圖、RMAN 恢復流程,即可在啟動故障、介質災難、遷移升級等關鍵場景中冷靜決策、精準恢復,守住資料庫核心可用性。

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