使用 SQL*Plus 或應用程式連線 Oracle 10g 時出現:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

Oracle 資料庫實例未啟動(Instance Down)。此時僅有少量背景程序(如 `oracle` 進程)殘留,共享記憶體區(SGA)未建立,故連線失敗。

tail -f $ORACLE_BASE/diag/rdbms///trace/alert_.log
若無近期 `Starting ORACLE instance` 記錄,即未啟動。
# 1. 設定環境變數
export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
# 2. 以 SYSDBA 登入並啟動
sqlplus /nolog
SQL> CONN / AS SYSDBA
SQL> STARTUP
輸出依序顯示:
| 誤區 | 正確認知 |
|---|---|
| 以為 Listener 啟動 = 資料庫啟動 | Listener 僅負責網路連線轉發,Instance 需單獨 STARTUP |
| Windows 服務 `OracleServiceORCL` 已啟動即代表資料庫開啟 | 服務啟動僅建立 Instance 程序,仍需 `STARTUP` 開啟資料庫 |
| 直接 `sqlplus scott/tiger` 連不上就重裝 | 先確認 Instance 狀態,再檢查 Listener、TNS、防火牆 |
Linux (systemd) 服務單元:
[Unit]
Description=Oracle 10g Database
After=network.target
[Service]
Type=forking
User=oracle
Environment=ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
Environment=ORACLE_SID=orcl
ExecStart=$ORACLE_HOME/bin/dbstart $ORACLE_HOME
ExecStop=$ORACLE_HOME/bin/dbshut $ORACLE_HOME
TimeoutSec=0
[Install]
WantedBy=multi-user.target
Windows 批次檔:
@echo off
set ORACLE_SID=orcl
net start OracleServiceORCL
sqlplus /nolog @startup.sql
:: startup.sql 內容: CONN / AS SYSDBA; STARTUP; EXIT
「shared memory realm does not exist」99% 是 Instance 未啟動。掌握觀察進程記憶體與標準 STARTUP 流程兩大核心技能,即可在 1 分鐘內定位並解決,避免無效排查網路、TNS、防火牆等外圍設定。