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

Oracle 資料庫重啟標準作業程序 (SOP):從優雅關閉到啟動驗證

     編輯:Oracle 資料庫基礎

適用環境

Oracle 10g/11g/12c/19c on Linux/Unix (AIX, HP-UX, Solaris) / Windows。生產環境建議在維護窗口執行,並提前通知應用擁有者。

重啟完整步驟 (標準優雅重啟)

  1. 停止應用層服務
    通知應用團隊停止連接資料庫的所有服務 (Web/App Server, 批次排程, ETL, 監控 Agent)。確認無新連線湧入。
  2. 停止 Listener 監聽程序
    $ lsnrctl stop
    # 或指定 Listener 名稱
    $ lsnrctl stop LISTENER_ORCL
    
    防止新連線建立,加速現有會話中斷。
  3. 備份控制檔 (到追蹤檔)
    以 `sysdba` 登入 SQL*Plus:
    SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    
    產生的 trace 檔位於 `USER_DUMP_DEST` (11g+ 為 `DIAG_DEST`),含 `CREATE CONTROLFILE` 腳本,災難恢復關鍵。
  4. 手動切換重做日誌 (確保脏資料落盤)
    SQL> ALTER SYSTEM SWITCH LOGFILE;
    -- 建議連續執行 2-3 次,確保當前 redo 已歸檔
    
    減少執行個體恢復時間 (MTTR)。
  5. 生成 Kill Session 腳本並執行 (強制斷開殘留會話)
    SQL> SET HEAD OFF FEEDBACK OFF NEWPAGE NONE PAGESIZE 0
    SQL> SPOOL /tmp/kill_sessions.sql
    SQL> SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''' IMMEDIATE;'
      2  FROM v$session WHERE username IS NOT NULL;
    SQL> SPOOL OFF
    SQL> @/tmp/kill_sessions.sql
    
    `IMMEDIATE` 讓交易回滾並釋放鎖定,避免 `SHUTDOWN IMMEDIATE` 等待過久。
  6. 優雅關閉資料庫
    SQL> SHUTDOWN IMMEDIATE;
    -- 等待完成:Database closed. Database dismounted. ORACLE instance shut down.
    
    禁止使用 `SHUTDOWN ABORT`** (除非極端故障),否則啟動時需執行執行個體恢復,耗時不可控且有資料一致性風險。
  7. 啟動 Listener
    $ lsnrctl start
    
    確認服務狀態 `READY`。
  8. 啟動資料庫執行個體
    $ sqlplus /nolog
    SQL> CONNECT / AS SYSDBA
    SQL> STARTUP;
    -- 或使用舊版 svrmgrl (10g 前)
    $ svrmgrl
    SVRMGR> CONNECT INTERNAL
    SVRMGR> STARTUP
    
    觀察輸出:`Database mounted. Database opened.` 代表啟動成功。
  9. 驗證服務可用性
    • `SELECT STATUS FROM V$INSTANCE;` → `OPEN`
    • `SELECT COUNT(*) FROM V$SESSION;` → 會話數正常增長。
    • 應用端進行煙霧測試 (登入、核心查詢、寫入)。
  10. 啟動應用層服務
    通知應用團隊依序啟動服務,觀察連線池建立、錯誤日誌無異常。

常見變體與注意事項

情境調整建議
RAC 叢集需在所有節點依序執行,或使用 `srvctl stop/start database -d ` 整體控制。
Data Guard 物理備援主庫關閉前確保備援庫同步完成 (無應用延遲);啟動順序:主庫 → 備援庫。
Windows 服務管理用 `net stop OracleServiceORCL` / `net start OracleServiceORCL` 控制執行個體服務;Listener 同為服務。
緊急重啟 (掛死)`SHUTDOWN ABORT` → `STARTUP` → 立即執行 `ANALYZE TABLE ... VALIDATE STRUCTURE` 檢查壞塊。
修改參數需重啟僅修改靜態參數 (如 `memory_target`, `processes`, `db_block_size`) 才需重啟;動態參數 `ALTER SYSTEM SET ... SCOPE=BOTH` 即時生效。

自動化腳本範例 (Shell + SQL)

#!/bin/bash
# restart_oracle.sh
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

log="/var/log/oracle_restart_$(date +%F_%H%M).log"
exec > >(tee -a "$log") 2>&1

echo "=== $(date) 開始重啟流程 ==="
lsnrctl stop >> "$log"
sqlplus -s / as sysdba <> "$log"
sqlplus -s / as sysdba <
生產環境必備: 變更管理審批、備份驗證、回滾方案、事後複盤記錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved