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

Oracle Shutdown Normal 掛起問題深度排查與解決方案

     編輯:DB2 教學

Oracle Shutdown Normal 掛起問題深度排查與解決方案

在進行機房停電維護前,需正常關閉測試庫。執行 shutdown normal 後,數據庫長時間無響應,陷入「掛起」狀態。本文記錄完整排查過程、原理分析及多種解決路徑,供 DBA 參考。

1. 現象重現與告警日誌分析

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

2. 核心原理:Shutdown Normal 的等待機制

  • 禁止新連接:發出命令後,不再允許新會話建立。
  • 等待現有會話斷開:必須所有當前連接的用戶主動斷開,或其事務提交/回滾後釋放連接。
  • 最完全但最不可控:若有長時間閒置連接或未提交事務,關閉將無限期等待。

3. 排查步驟與嘗試方案

方案一:殺掉所有遠程用戶進程

# 查找非本地連接進程並強制終止
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 成功,因當前無活躍連接。

4. 四種關閉模式對比總結

模式適用場景關鍵行為下次啟動是否需實例恢復
NORMAL(默認)計劃維護,用戶可配合退出等待所有用戶斷開、事務結束否
IMMEDIATE緊急斷電、應用異常、無法聯系用戶回滾未提交事務、中斷所有連接、不等待用戶退出否
TRANSACTIONAL計劃停機,允許事務完成禁止新事務、等待活躍事務提交、再中斷連接否
ABORT極端故障、一分鐘後斷電、實例啟動失敗立即中斷、不回滾事務、不等待任何操作是(需實例恢復)

5. 關鍵知識點補充

  • 訪問正在關閉的數據庫報 ORA-01090。
  • 關閉操作需 SYSDBA 或 SYSOPER 權限。
  • 默認超時 1 小時,超時自動取消並報 ORA-01013。

6. 最佳實踐建議

  1. 日常維護優先使用 shutdown immediate,避免不可控等待。
  2. 執行 shutdown normal 前,先通知應用端優雅下線,或腳本殺掉已知閒置連接。
  3. 若必須用 normal,可設置定時腳本監控 v$session,超時自動轉 immediate。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved