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

Oracle 實例建立完整操作指南:從參數檔、背景進程啟動到三階段啟動流程與狀態轉換控制

     編輯:Oracle 資料庫基礎

建立 Oracle 實例非單純「安裝軟體」,而是**配置參數檔、分配 SGA、啟動背景進程、掛載/開啟資料庫**的精確工程過程。本文提供從**規劃參數、建立 SPFILE、啟動實例、狀態轉換控制、常見啟動失敗排查**的完整 SOP,確保每次啟動可控、可驗證、可回滾。

前置規劃:關鍵參數決策

建立 SPFILE (Server Parameter File) —— 持久化參數倉庫


-- 1. 以 PFILE 文本編輯 (init.ora)
-- 2. 啟動 NOMOUNT 實例 (讀取 PFILE)
STARTUP NOMOUNT PFILE='/u01/app/oracle/dbs/initPRDCRM.ora';

-- 3. 從記憶體建立 SPFILE (寫入磁碟,二進制格式)
CREATE SPFILE FROM PFILE='/u01/app/oracle/dbs/initPRDCRM.ora';
-- 或指定 ASM 路徑
CREATE SPFILE='+DATA/PRDCRM/PARAMETERFILE/spfilePRDCRM.ora' 
FROM PFILE='/u01/app/oracle/dbs/initPRDCRM.ora';

-- 4. 驗證 SPFILE 內容
SELECT name, value FROM v$spparameter WHERE value IS NOT NULL;

優勢: SPFILE 支援 `ALTER SYSTEM SET ... SCOPE=SPFILE/BOTH` 動態持久化,無需手工編輯文本、重啟生效。

三階段啟動流程標準化操作

階段 1:NOMOUNT (啟動實例)


-- 環境變數
export ORACLE_SID=PRDCRM
export ORACLE_HOME=/u01/app/oracle/product/19c
export PATH=$ORACLE_HOME/bin:$PATH

-- 啟動 (讀取 SPFILE 預設位置 $ORACLE_HOME/dbs/spfile.ora)
sqlplus / as sysdba
SQL> STARTUP NOMOUNT;
-- 輸出確認:
-- ORACLE instance started.
-- Total System Global Area 8589934592 bytes
-- ...

**驗證點:** `V$SGAINFO`、`V$BGPROCESS` (PMON/SMON/DBW0/LGWR/CKPT/SMON/ARC0... 狀態 `STARTED`)。

階段 2:MOUNT (掛載資料庫)


SQL> ALTER DATABASE MOUNT;
-- 輸出:Database altered.
-- 驗證:
SQL> SELECT name, open_mode FROM v$database;
-- NAME      OPEN_MODE
-- PRDCRM    MOUNTED

**適用場景:** 完整備份 (冷備份)、控制檔維護、歸檔模式切換、Data Guard 實體備份。此階段**僅 DBA 可連線** (`RESTRICTED SESSION`)。

階段 3:OPEN (開啟資料庫)


SQL> ALTER DATABASE OPEN;
-- 輸出:Database altered.
-- 驗證:
SQL> SELECT name, open_mode FROM v$database;
-- NAME      OPEN_MODE
-- PRDCRM    READ WRITE

-- 可選:唯讀開啟 (報表/備份)
SQL> ALTER DATABASE OPEN READ ONLY;

**驗證點:** `V$INSTANCE.STATUS = OPEN`,`V$THREAD.STATUS = OPEN`,Alert Log 記錄 `Database opened`。

一鍵完整啟動 (生產標準)


SQL> STARTUP; 
-- 等同於依序執行 NOMOUNT → MOUNT → OPEN

關閉與狀態轉換控制鐵律

參數決策依據建議值/策略
DB_NAME資料庫全域唯一名稱 (最長 8 字元)專案代碼縮寫,如 `PRDCRM`
DB_UNIQUE_NAMEData Guard 環境唯一標識同 DB_NAME 或加站點後綴 `PRDCRM_SITEA`
SGA_TARGET / MEMORY_TARGET記憶體管理模式 (ASMM/AMM)生產建議 ASMM: `SGA_TARGET=80% 物理記憶體`
PGA_AGGREGATE_TARGETPGA 總量上限`SGA_TARGET * 0.2 ~ 0.5`
PROCESSES / SESSIONS最大連接數上限預估峰值連接數 × 1.5 + 背景進程 (~30)
CONTROL_FILES控制檔多路複用路徑 (至少 2 路,不同磁碟/控制器)`+DATA/PRDCRM/CONTROLFILE/current.1, +FRA/PRDCRM/CONTROLFILE/current.2`
DB_BLOCK_SIZE資料塊大小 (建立後不可變)OLTP 8K,DW 16K/32K
COMPATIBLE版本相容性 (升級後不可降級)當前版本號 (如 `19.0.0`)
UNDO_TABLESPACE / UNDO_MANAGEMENT自動 Undo 管理`AUTO`, 專用 UNDO 表空間
LOG_ARCHIVE_DEST_n歸檔目的地 (生產必開啟歸檔模式)至少 2 路:本地 + 遠端/備份

鐵律: **單向流向**:OPEN → MOUNT → NOMOUNT → SHUTDOWN。**無法從 OPEN 直接降級到 MOUNT**,必須 SHUTDOWN 再 STARTUP MOUNT。

特殊啟動模式

  • RESTRICTED SESSION: `STARTUP RESTRICT` / `ALTER SYSTEM ENABLE RESTRICTED SESSION`。僅 `RESTRICTED SESSION` 權限用戶可連線 (DBA、維護帳號)。用於資料遷移、升級、大批次維護。
  • FORCE: `STARTUP FORCE`。相當於 `SHUTDOWN ABORT` + `STARTUP`。實例卡住、共享記憶體殘留時強制重啟。
  • RECOVER: `STARTUP MOUNT` → `RECOVER DATABASE` → `ALTER DATABASE OPEN`。介質恢復流程。
  • UPGRADE/DOWNGRADE: `STARTUP UPGRADE` / `STARTUP DOWNGRADE`。版本升降級專用模式,僅核心系統表可存取。

常見啟動失敗排查矩陣

命令行為適用場景耗時
SHUTDOWN NORMAL等待所有用戶斷開、交易提交計畫維護窗口、用戶少不可控 (視用戶)
SHUTDOWN TRANSACTIONAL阻止新連接/交易,等待進行中交易提交/回滾**生產標準關閉**,平衡速度與數據安全秒~分鐘
SHUTDOWN IMMEDIATE強制回滾未提交交易、斷開所有連接、不做 Checkpoint緊急維護、效能惡化需快速重啟秒級
SHUTDOWN ABORT瞬間終止實例進程,**不關閉檔案**、下次啟動需實例恢復**極端緊急** (存儲故障、OS 掛起)、最後手段瞬間
錯誤/現象可能原因排查動作
ORA-01078: failure in processing system parameters參數檔路徑錯、參數值非法、隱藏參數衝突檢查 Alert Log 具體參數錯誤行;改用 PFILE 啟動修正後重建 SPFILE
ORA-00205: error in identifying control fileCONTROL_FILES 路徑錯、檔案遺失、ASM 磁碟組未掛載檢查參數值、ASM 實例狀態、從備份恢復控制檔
ORA-01157: cannot identify/lock data file資料檔遺失、離線、權限、存儲故障`V$RECOVER_FILE` 確認狀態;恢復或離線非核心檔案
ORA-00313: open failed for members of log groupRedo Log 損壞/遺失、多路複用成員不一致清除/重建損壞成員;必要時不完全恢復
實例啟動卡住 (無報錯)共享記憶體不足 (OS /dev/shm)、大頁面配置錯、背景進程啟動順序死鎖檢查 OS `ipcs -m`、`/proc/meminfo`、Alert Log 最後幾行;`STARTUP FORCE`
ORA-01033: ORACLE initialization or shutdown in progress實例尚未完全開啟 (恢復中)、或已開始關閉等待或 `SHUTDOWN ABORT` 後重啟

啟動後驗證清單 (健康檢查)

  1. [ ] `SELECT status FROM v$instance;` → `OPEN`
  2. [ ] `SELECT open_mode FROM v$database;` → `READ WRITE`
  3. [ ] `SELECT count(*) FROM v$bgprocess WHERE pname NOT IN ('P000'...) AND status != 'STARTED';` → `0` (所有背景進程運行)
  4. [ ] `SELECT * FROM v$recover_file;` → `0 rows` (無需恢復檔案)
  5. [ ] Alert Log 尾端無錯誤、無 `ORA-` 開頭行
  6. [ ] 關鍵服務註冊:`LSNRCTL SERVICES` 顯示 `READY` 狀態
  7. [ ] 測試連線:`SQLPLUS user/pwd@tns` 成功

總結

實例建立與啟動是**基礎設施工程**,而非隨意操作。**參數規劃 → SPFILE 持久化 → 三階段標準啟動 → 健康檢查驗證 → 狀態轉換管控** 五環扣一環。將此 SOP 納入自動化部署腳本 (Ansible/Terraform/Shell)、變更管理流程、災難恢復演練手冊,才能保證 7×24 系統的啟動可靠性。

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