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

Oracle 資料庫標準重啟流程:優雅關閉與啟動操作手冊

     編輯:Oracle 資料庫基礎

Oracle 資料庫重啟屬於高風險變更,**必須遵循標準化流程、驗證備份、通知業務、預留回滾方案**。本文提供生產級標準重啟 SOP:應用層停止、監聽器控制、控制檔備份、Redo 切換、強制斷開會話、IMMEDIATE 關閉、啟動驗證、應用恢復,並說明各步驟原理與常見異常處理。

重啟前置檢查清單

  • 已通知業務方、獲得變更窗口批准
  • 確認最近一次 **RMAN 全備/增量備份成功** (含控制檔、SPFILE)
  • 確認 **Data Guard/GoldenGate 同步狀態正常** (如有)
  • 準備回滾方案:若啟動失敗,如何恢復 (恢復控制檔、時間點恢復等)
  • 記錄當前狀態:SELECT * FROM V$INSTANCE; SELECT STATUS FROM V$INSTANCE;

標準重啟流程 (單機/Primary)

階段 1:應用層優雅停止

  1. 通知應用團隊停止寫入業務 (讀取可視情況保留)
  2. 關閉連線池、中介軟體、排程作業
  3. 驗證:SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL AND STATUS='ACTIVE'; 應趨近 0

階段 2:監聽器停止 (阻斷新連線)

$ lsnrctl stop
# 或指定監聽器
$ lsnrctl stop LISTENER_ORCL

驗證:lsnrctl status 顯示 "The listener supports no services"

階段 3:資料庫層面準備 (SYSDBA)

SQL> CONN / AS SYSDBA

-- 3.1 備份控制檔至追蹤檔 (人工可讀,便於災難重建)
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
-- 生成檔案位於 USER_DUMP_DEST (10g+) 或 BACKGROUND_DUMP_DEST

-- 3.2 手動切換 Redo Log (確保脏块刷盤、減少啟動恢復時間)
SQL> ALTER SYSTEM SWITCH LOGFILE;
-- 執行 2-3 次,或直到 CURRENT 群組變更

-- 3.3 生成 Kill Session 腳本 (避免 SHUTDOWN IMMEDIATE 等待過久)
SQL> SET HEAD OFF FEED OFF PAGES 0
SQL> SPOOL /tmp/kill_sessions.sql
SQL> SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''' IMMEDIATE;'
  FROM   v$session WHERE username IS NOT NULL;
SQL> SPOOL OFF

-- 3.4 執行強制斷開 (可選,視業務容忍度)
SQL> @/tmp/kill_sessions.sql
-- 若報 ORA-00030/ORA-00031 為正常 (會話已斷)

階段 4:優雅關閉資料庫

SQL> SHUTDOWN IMMEDIATE;
-- 等待輸出 "Database closed. Database dismounted. ORACLE instance shut down."
-- 若超時 (大交易回滾中),可考慮 SHUTDOWN ABORT 但需接受較長啟動恢復時間

關閉模式對比:

模式行為適用場景
NORMAL等待所有用戶主動斷開計劃維護窗口充裕
IMMEDIATE回滾未提交交易、斷開會話、不等待**標準生產重啟首選**
TRANSACTIONAL等待當前交易提交/回滾再斷開極敏感業務、需最小化回滾
ABORT立即終止進程、不回滾、啟動需實例恢復緊急故障、掛死無響應

階段 5:啟動資料庫

# 5.1 啟動監聽器
$ lsnrctl start

# 5.2 啟動資料庫實例
$ sqlplus /nolog
SQL> CONN / AS SYSDBA
SQL> STARTUP;
-- 依序輸出:
-- ORACLE instance started.
-- Database mounted.
-- Database opened.

# 5.3 驗證狀態
SQL> SELECT INSTANCE_NAME, STATUS, OPEN_MODE FROM V$INSTANCE;
-- 應為 OPEN / READ WRITE

階段 6:應用層恢復與驗證

  1. 啟動應用服務、連線池
  2. 執行冒煙測試:核心查詢、寫入、跨庫連結
  3. 監控告警日誌:tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log
  4. 確認 Data Guard/複寫同步恢復正常

RAC 環境滾動重啟 (單節點)

# 節點 1
$ srvctl stop instance -d ORCL -i ORCL1 -o IMMEDIATE
$ srvctl start instance -d ORCL -i ORCL1
# 驗證服務正常後,依序滾動其餘節點

常見異常與應對

現象原因應對
SHUTDOWN IMMEDIATE 卡住 > 30 分鐘大交易回滾 / 會話持有鎖不放另開 SYSDBA 執行 KILL SESSION 腳本;仍卡則 SHUTDOWN ABORT
STARTUP 掛在 "Database mounted"控制檔不一致 / 數據檔缺失 / Redo 損壞檢查 ALERT LOG,按錯誤碼處理 (恢復控制檔/數據檔/RESETLOGS)
ORA-01122: database file failed verification數據檔 SCN 不一致RECOVER DATABASE UNTIL CANCEL / 從備份恢復
監聽器啟動失敗 TNS-01106listener.ora 格式錯 / PORT 衝突netca 重建 / lsnrctl status 診斷

自動化腳本範本 (Shell + SQL*Plus)

#!/bin/bash
# oracle_restart.sh - 需以 oracle 用戶執行
ORACLE_SID=ORCL
export ORACLE_SID

log() { echo "[$(date '+%F %T')] $*"; }

log "停止監聽器"
lsnrctl stop

log "關閉資料庫 IMMEDIATE"
sqlplus -s / as sysdba <

嚴格執行此 SOP,配合變更管理流程,可將 Oracle 重啟風險降至最低,確保核心業務連續性。

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