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

Linux 平台 Oracle 資料庫啟動/關閉完整操作指南與參數詳解

     編輯:Oracle 資料庫基礎

Linux 上 Oracle 資料庫的啟動與關閉涉及環境變數、實例階段、關閉模式選擇等關鍵細節。本文系統整理從環境配置、SQL*Plus 連線、STARTUP/SHUTDOWN 四大模式、監聽器管理、常見錯誤排查到自動化腳本的完整操作指南,適合 DBA 日常運維與新手入門參考。

環境變數配置 (~/.bash_profile)

export ORACLE_SID=ORCL
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

執行 source ~/.bash_profile 生效。驗證:echo $ORACLE_SID、sqlplus -v。

啟動資料庫 (STARTUP 四階段)

$ sqlplus /nolog
SQL> CONN / AS SYSDBA
SQL> STARTUP;
-- 等同於依序執行:
-- STARTUP NOMOUNT  (啟動 SGA + 背景進程,讀取 SPFILE/初始化參數)
-- ALTER DATABASE MOUNT   (讀取控制檔,掛載資料庫)
-- ALTER DATABASE OPEN    (開啟數據檔/Redo,允許用戶存取)

STARTUP 參數模式詳解

模式階段典型用途
NOMOUNT僅 Instance建立資料庫、重建控制檔、恢復控制檔
MOUNTInstance + 控制檔備份/恢復控制檔、啟用/關閉歸檔、重命名數據檔/Redo
OPEN (預設)完整開啟正常業務服務
READ ONLY唯讀開啟報表查詢、邏輯備份、立由庫開啟
RESTRICT限制模式僅允許 RESTRICTED SESSION 權限用戶 (DBA 維護)
FORCE強制重啟資料庫掛死無法正常關閉時 (相當 ABORT + STARTUP)
PFILE=path指定參數檔參數調優測試、SPFILE 損壞恢復

關閉資料庫 (SHUTDOWN 四模式)

SQL> SHUTDOWN IMMEDIATE;  -- 推薦生產標準
-- 等同於:
-- 1. 拒絕新連線
-- 2. 等待當前 SQL 完成
-- 3. 回滾未提交交易
-- 4. 斷開所有會話
-- 5. 關閉數據檔/Redo (MOUNT)
-- 6. 釋放 SGA、終止背景進程 (NOMOUNT)

SHUTDOWN 模式對比

模式等待條件資料安全啟動恢復時間適用場景
NORMAL所有用戶主動斷開✅短計劃維護、無緊迫性
IMMEDIATE當前 SQL 完成✅ (回滾未提交)短**生產標準**
TRANSACTIONAL當前交易提交/回滾✅短長交易業務、需最小化回滾
ABORT不等待、立即終止⚠️ 需實例恢復**長** (視 Redo 量)緊急故障、掛死

監聽器管理

# 啟動
$ lsnrctl start
# 狀態
$ lsnrctl status
# 停止
$ lsnrctl stop
# 重新載入配置 (不中斷現有連線)
$ lsnrctl reload

最佳實踐: **關閉資料庫前先停止監聽器**,啟動資料庫後再啟動監聽器,避免啟動過程中新連線干擾恢復。

常見啟動/關閉錯誤排查

錯誤原因解決
ORA-01031: insufficient privileges非 oracle 用戶 / 未加入 dba 組 / 遠端無密碼檔su - oracle / usermod -aG dba oracle / orapwd 建立密碼檔
ORA-01034: ORACLE not available實例未啟動 / ORACLE_SID 錯誤 / 共享記憶體不足檢查 ORACLE_SID、ipcs -m 清理舊段、STARTUP
ORA-00845: MEMORY_TARGET not supported/dev/shm 太小mount -o remount,size=4G /dev/shm 或調小 MEMORY_TARGET
LRM-00109: could not open parameter fileSPFILE/PFILE 路徑錯誤STARTUP PFILE=/path/to/init.ora 或 CREATE SPFILE FROM PFILE
監聽器啟動失敗 TNS-01150PORT 1521 佔用 / listener.ora 格式錯netstat -anp | grep 1521 / netca 重建
SHUTDOWN 掛起大交易回滾 / 會話不釋放鎖另開會話 KILL SESSION / 無奈則 SHUTDOWN ABORT

自動化啟停腳本 (systemd 服務範例)

# /etc/systemd/system/oracle-db.service
[Unit]
Description=Oracle Database 19c
After=network.target oracle-listener.service

[Service]
Type=forking
User=oracle
Group=oinstall
Environment=ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
Environment=ORACLE_SID=ORCL
ExecStart=$ORACLE_HOME/bin/dbstart $ORACLE_HOME
ExecStop=$ORACLE_HOME/bin/dbshut $ORACLE_HOME
TimeoutSec=600

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/oracle-listener.service
[Unit]
Description=Oracle Listener
After=network.target

[Service]
Type=forking
User=oracle
Group=oinstall
Environment=ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ExecStart=$ORACLE_HOME/bin/lsnrctl start
ExecStop=$ORACLE_HOME/bin/lsnrctl stop

[Install]
WantedBy=multi-user.target

# 啟用
systemctl daemon-reload
systemctl enable oracle-listener oracle-db
systemctl start oracle-listener oracle-db

dbstart/dbshut 會讀取 /etc/oratab (格式: ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y 最後 Y 表示自動啟動)。

驗證清單 (啟動後必檢)

  1. SELECT INSTANCE_NAME, STATUS, OPEN_MODE, LOG_MODE FROM V$INSTANCE, V$DATABASE;
  2. SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL; (應 > 0 含背景進程)
  3. lsnrctl status 顯示服務 READY
  4. 應用連線測試:核心查詢 < 100ms
  5. ALERT LOG 無新錯誤:tail -200 $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log

熟練掌握 Linux 上 Oracle 的啟停模式、環境變數、監聽器協作與自動化部署,是 DBA 穩定交付資料庫服務的基本功。

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