Oracle 數據庫在 Linux 上的重啟操作看似簡單,實則涉及實例啟動、監聽器管理、權限切換等多個環節,任何一步疏漏都可能導致服務掛掉或連接失敗。本文梳理三大主流重啟方法,覆蓋 SQL*Plus 命令行、腳本自動化與手動分步操作,並重點講解監聽器同步啟動的關鍵細節。
適用場景:需要精確控制啟動階段(NOMOUNT/MOUNT/OPEN)、排查啟動報錯、執行恢復操作。
# 1. 切換到 oracle 用戶(環境變量自動加載)
su - oracle
# 2. 進入 SQL*Plus 無登錄模式
sqlplus /nolog
# 3. 以 SYSDBA 權限連接
SQL> CONNECT / AS SYSDBA
# 4. 啟動數據庫(默認 OPEN 階段)
SQL> STARTUP
# 或分階段啟動:
# STARTUP NOMOUNT -> ALTER DATABASE MOUNT -> ALTER DATABASE OPEN
# 5. 關閉數據庫(優雅關閉,等待會話結束)
SQL> SHUTDOWN IMMEDIATE
# 其他模式:NORMAL(等待所有用戶斷開) | TRANSACTIONAL(等待事務提交) | ABORT(強制,慎用)
# 6. 退出 SQL*Plus
SQL> EXIT
# 7. 管理監聽器(關鍵步驟,常被遺漏)
lsnrctl start # 啟動監聽器
lsnrctl status # 驗證狀態
Oracle 安裝目錄下自帶的啟停腳本,會根據 /etc/oratab 配置自動處理多實例。
# 以 oracle 用戶執行(或 root 切換後執行)
cd $ORACLE_HOME/bin
# 啟動所有配置為 Y 的實例及監聽器
./dbstart $ORACLE_HOME
# 僅啟動監聽器
./lsnrctl start
# 關閉所有實例及監聽器
./dbshut $ORACLE_HOME
# SID:ORACLE_HOME:Y/N (Y=開機自啟)
ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y
將 Oracle 實例註冊為 systemd 服務,實現開機自啟、依賴管理、日誌聚合。
# /etc/systemd/system/oracle-db.service
[Unit]
Description=Oracle Database Instance
After=network.target oracle-listener.service
Wants=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=300
[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 --now oracle-listener oracle-db
| 命令 | 功能 |
|---|---|
lsnrctl start | 啟動監聽器 |
lsnrctl stop | 停止監聽器 |
lsnrctl status | 查看狀態、端口、服務註冊情況 |
lsnrctl services | 詳細顯示已註冊服務與處理程序 |
lsnrctl reload | 熱加載配置變更(無需重啟) |
listener.ora 的 SID_LIST 或確認實例已動態註冊(ALTER SYSTEM REGISTER)STARTUP,檢查告警日誌 $ORACLE_BASE/diag/rdbms/*/trace/alert_*.loglsnrctl start,檢查防火牆 1521 埠oracle 用戶操作,$ORACLE_HOME 權限正確(chown -R oracle:oinstall $ORACLE_HOME)SHUTDOWN IMMEDIATE → 維護操作 → STARTUP → lsnrctl start → 驗證應用連接CREATE PFILE FROM SPFILE 留存備份tail -f alert_*.log 確認無錯誤掌握這三種方法,無論是日常維護、故障恢復還是自動化部署,都能從容應對 Oracle 在 Linux 上的啟停管理。建議將標準化操作流程文檔化,納入運行手冊。