在進行機房停電維護前,需正常關閉測試庫。執行 shutdown normal 後,數據庫長時間無響應,陷入「掛起」狀態。本文記錄完整排查過程、原理分析及多種解決路徑,供 DBA 參考。
SQL> shutdown normal
-- 關閉窗口後,alert 日誌顯示:
Mon Jun 22 16:50:22 2015
Shutting down instance (normal)
Stopping background process SMCO
Shutting down instance: further logons disabled
...
隨後嘗試 startup 或 shutdown immediate 均報錯:
ORA-01012: not logged on
ORA-24324: service handle not initialized
ORA-01090: shutdown in progress - connection is not permitted
# 查找非本地連接進程並強制終止
ps -ef | grep ora | grep -v grep | grep -v ora_ | grep LOCAL=NO | awk '{print $2}' | xargs kill -9
日誌顯示 All dispatchers and shared servers shutdown,但 sqlplus 仍報 ORA-01090。
lsnrctl stop
問題依舊,說明監聽器不是阻塞源頭。
SQL> shutdown abort
Instance terminated by USER, pid = 28558
實例終止後,重新啟動並執行 shutdown normal 成功,因當前無活躍連接。
| 模式 | 適用場景 | 關鍵行為 | 下次啟動是否需實例恢復 |
|---|---|---|---|
| NORMAL(默認) | 計劃維護,用戶可配合退出 | 等待所有用戶斷開、事務結束 | 否 |
| IMMEDIATE | 緊急斷電、應用異常、無法聯系用戶 | 回滾未提交事務、中斷所有連接、不等待用戶退出 | 否 |
| TRANSACTIONAL | 計劃停機,允許事務完成 | 禁止新事務、等待活躍事務提交、再中斷連接 | 否 |
| ABORT | 極端故障、一分鐘後斷電、實例啟動失敗 | 立即中斷、不回滾事務、不等待任何操作 | 是(需實例恢復) |
ORA-01090。SYSDBA 或 SYSOPER 權限。ORA-01013。shutdown immediate,避免不可控等待。shutdown normal 前,先通知應用端優雅下線,或腳本殺掉已知閒置連接。normal,可設置定時腳本監控 v$session,超時自動轉 immediate。