Oracle 資料庫啟動分三階段:NOMOUNT → MOUNT → OPEN,關閉則反向。各階段完成不同初始化任務,適用不同維護場景。
-- 連線為 SYSDBA (需 OS 認證或密碼檔)
sqlplus / as sysdba
-- 或
sqlplus sys/password@sid as sysdba
-- 完整啟動 (相當於 STARTUP NOMOUNT → ALTER DATABASE MOUNT → ALTER DATABASE OPEN)
STARTUP
-- 分階段啟動
STARTUP NOMOUNT -- 僅啟動 Instance (SGA + 背景進程),讀取參數檔
STARTUP MOUNT -- 掛載控制檔,確認資料檔/Redo Log 位置,未開啟檔案
STARTUP OPEN -- 開啟所有資料檔/Redo Log,允許用戶存取 (預設)
-- 關閉 (正常模式:等待工作階段結束、檢查點、關閉檔案、卸載、關閉 Instance)
SHUTDOWN IMMEDIATE -- 強制中斷交易、回滾、關閉 (最常用生產關閉)
SHUTDOWN NORMAL -- 等待所有用戶斷線 (不可預測時間)
SHUTDOWN TRANSACTIONAL -- 等待進行中交易完成、不允許新交易
SHUTDOWN ABORT -- 緊急中止,下次啟動需執行執行個體復原 (避免使用)
| 模式 | 命令 | 階段 | 可執行操作 | 適用場景 |
|---|---|---|---|---|
| NOMOUNT | STARTUP NOMOUNT | Instance 啟動 | 建立控制檔、建立資料庫、恢復控制檔 | 新建資料庫、控制檔損壞重建 |
| MOUNT | STARTUP MOUNT | Instance + 掛載 | 歸檔模式切換、媒體恢復、資料檔上線/離線、重新定位檔案 | 備份恢復、結構調整、歸檔設定 |
| OPEN | STARTUP / STARTUP OPEN | 完整開啟 | 正常業務存取、查詢、DML/DDL | 日常生產運行 |
| RESTRICT | STARTUP RESTRICT | OPEN + 限制 | 僅允許 RESTRICTED SESSION 權限用戶 | 維護窗口、資料遷移、效能測試 |
| FORCE | STARTUP FORCE | 強制重啟 | 先 ABORT 關閉再正常啟動 | SHUTDOWN 掛起無法關閉時 |
| PFILE 指定 | STARTUP PFILE=path | 依指定參數檔 | 使用非預設參數檔啟動 | 參數調優測試、多環境部署 |
| RECOVER | STARTUP MOUNT → RECOVER DATABASE | MOUNT + 恢復 | 媒體恢復、Point-in-Time Recovery | 災難恢復、備份驗證 |
使用 srvctl 管理資源,而非直接 SQL*Plus:
# 啟動整個資料庫 (所有實例)
srvctl start database -d orcl
# 啟動特定實例
srvctl start instance -d orcl -i orcl1
# 關閉資料庫 (所有實例)
srvctl stop database -d orcl -o immediate
# 關閉特定實例
srvctl stop instance -d orcl -i orcl1 -o immediate
# 檢查狀態
srvctl status database -d orcl
srvctl status instance -d orcl -i orcl1
注意:RAC 環境下勿直接使用 SQL*Plus SHUTDOWN/STARTUP,會破壞叢集資源狀態一致性。
STARTUP UPGRADE (遷移模式)、STARTUP DOWNGRADESTARTUP EXCLUSIVE (單實例獨佔掛載,RAC 維護用)STARTUP PLUGGABLE DATABASE pdb1、ALTER PLUGGABLE DATABASE ALL OPENSTARTUP FORCE 增強、自動診斷儲存庫 (ADR) 整合-- 從 SPFILE 建立 PFILE (文字編輯用)
CREATE PFILE='/tmp/init.ora' FROM SPFILE;
-- 從 PFILE 建立 SPFILE (持久化)
CREATE SPFILE FROM PFILE='/tmp/init.ora';
-- 修改 SPFILE 參數 (立即/下次啟動生效)
ALTER SYSTEM SET sga_target=2G SCOPE=SPFILE; -- 下次啟動
ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=BOTH; -- 立即+持久
-- 參數檔搜尋順序
1. $ORACLE_HOME/dbs/spfileSID.ora
2. $ORACLE_HOME/dbs/spfile.ora
3. $ORACLE_HOME/dbs/initSID.ora
| 錯誤代碼/現象 | 可能原因 | 排查步驟 |
|---|---|---|
| ORA-01078: failure in processing system parameters | 參數檔語法錯誤、路徑錯誤、參數值無效 | 檢查 alert.log、改用 PFILE 啟動、逐一驗證參數 |
| ORA-00205: control file error | 控制檔遺失、損壞、路徑不符 | 檢查 control_files 參數、從備份恢復控制檔、NOMOUNT 重建 |
| ORA-01122: database file failed verification | 資料檔標頭不一致 (SCN/檢查點) | 媒體恢復、檢查檔案是否屬於同一資料庫 |
| ORA-00600/ORA-07445 | 內部錯誤/核心傾印 | 收集 trace 檔、Metalink 查詢、聯繫 Oracle Support |
| Instance 卡在 "Starting ORACLE instance" | SGA 過大超過實體記憶體、巨大頁面設定錯誤 | 檢查 /proc/meminfo、調整 sga_target、檢查 /etc/sysctl.conf |
#!/bin/bash
# oracle_start.sh
export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
# 使用 srvctl (RAC) 或 sqlplus (單機)
if [ -f $ORACLE_HOME/bin/srvctl ]; then
srvctl start database -d $ORACLE_SID
else
sqlplus / as sysdba <