首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 9i 異常關閉後的數據庫啟動恢復指南

     編輯:Oracle 資料庫相關知識

故障現象

因斷電導致 Oracle 異常關閉,後續使用 SQL*Plus 啟動報錯:

Connection can not permitted, shut in progress.

嘗試 STARTUP 仍提示 shutdown in progress,但 SELECT * FROM TAB 顯示 no rows selected,實際未掛載數據庫。

核心解決方案:STARTUP FORCE

C:\> sqlplus /nolog
SQL> CONNECT / AS SYSDBA
已連接至空閒例程
SQL> STARTUP FORCE
已啟動。數據庫已正常啟動。

原理: STARTUP FORCE 先強制關閉實例(相當於 SHUTDOWN ABORT),再正常啟動,清除殘留的「關閉中」狀態標記。

替代方案:服務重啟 + Enterprise Manager

  1. Windows 服務中停止 OracleService(如 OracleServiceORACLE)
  2. 啟動 Oracle Enterprise Manager Console
  3. 選擇獨立啟動 → 選擇全局數據庫名(如 orcl)
  4. 輸入:用戶名 system、密碼、連接身份 SYSDBA
  5. 在「一般信息」標籤將實例狀態先改為「關閉」,再改為「打開」
  6. 若提示服務未啟動,手動啟動 OracleService 後重試

啟動模式補充知識

命令用途適用場景
STARTUP FORCE強制重啟異常關閉、實例凍結、掛載狀態卡死
STARTUP RESTRICT限制模式啟動僅允許擁有 RESTRICTED SESSION 權限的用戶連接,適合維護窗口
ALTER SYSTEM ENABLE RESTRICTED SESSION運行中開啟限制在線切換維護模式,需 ALTER SYSTEM 權限
STARTUP NOMOUNT僅啟動實例創建數據庫、恢復控制文件、僅訪問 V$ 視圖
STARTUP MOUNT掛載數據庫備份控制文件、啟用歸檔模式、恢復數據文件
STARTUP OPEN正常打開(默認)日常業務運行

根因分析

異常斷電導致 SHUTDOWN 進程未正常退出,控制文件/內存中殘留「關閉中」標記。再次啟動時實例檢測到該標記,拒絕正常 STARTUP。STARTUP FORCE 通過強制實例終止清除標記,是最快、最標準的恢復手段。

最佳實踐建議

  • 生產環境配置 UPS 與優雅關閉腳本,避免硬斷電
  • 定期演練 STARTUP FORCE、RECOVER DATABASE 流程
  • 監控 alert.log 中的 SHUTDOWN 記錄,異常關閉後必須檢查數據一致性
  • 重要數據庫啟用 Data Guard 或 RAC,實現高可用自動故障轉移

總結

遭遇 shutdown in progress 無法啟動時,**首選 STARTUP FORCE**,單條命令 30 秒內解決。理解啟動各階段(NOMOUNT → MOUNT → OPEN)與限制模式,能應對更複雜的恢復場景。

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