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

Oracle 資料庫重啟標準作業程序(SOP):10 步驟確保零資料遺失與快速恢復

     編輯:Oracle 資料庫相關知識

資料庫重啟非單純 shutdown/startup,生產環境需嚴格遵循 SOP 確保交易完整性、備份可用性、服務平滑切換。本文提供 10 步驟標準重啟流程,適用於計畫維護、修補套用、參數調整等場景。

標準重啟 10 步驟

  1. 停止應用層:通知業務單位、停止 Web/App Server、批次排程、ETL 作業,確保無新連線湧入。
  2. 停止 Listener:
    $ lsnrctl stop
    
    防止重啟過程中新連線嘗試導致錯誤日誌暴增。
  3. 備份控制檔至 Trace(SYSDBA):
    SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    
    產生可讀的 CREATE CONTROLFILE 腳本,災難時重建控制檔之用。
  4. 手動切換 Redo Log:
    SQL> ALTER SYSTEM SWITCH LOGFILE;
    
    強制將記憶體 Redo Buffer 刷入線上 Redo Log,縮短復原時間、確保無交易遺失。
  5. 產生 Kill Session 腳本:
    SET HEAD OFF FEEDBACK OFF NEWPAGE NONE
    SPOOL /oracle_backup/bin/kill_all_session.sql
    SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';'
    FROM v$session WHERE username IS NOT NULL;
    SPOOL OFF
    
  6. 執行 Kill Session:
    SQL> @/oracle_backup/bin/kill_all_session.sql
    
    強制釋放使用者鎖定資源,避免 SHUTDOWN IMMEDIATE 長時間等待。
  7. IMMEDIATE 關閉資料庫:
    SQL> SHUTDOWN IMMEDIATE;
    -- 或舊版 SVRMGRL> SHUTDOWN IMMEDIATE;
    
    • 不等待使用者斷線(已 Kill)
    • 回滾未認可交易
    • 檢查點完成後關閉,下次啟動無需 Instance Recovery
  8. 啟動 Listener:
    $ lsnrctl start
    
  9. 啟動資料庫:
    $ sqlplus /nolog
    SQL> CONNECT / AS SYSDBA
    SQL> STARTUP;
    -- 或舊版 SVRMGRL
    
  10. 啟動應用層:依相依順序啟動 Web/App/批次/ETL,驗證服務健康狀態。

關鍵決策點:SHUTDOWN 模式選擇

模式行為適用場景風險
NORMAL等所有使用者斷線、不允許新連線維護窗口極長、使用者配合度高可能永遠等不到
IMMEDIATE回滾未認可交易、斷開所有連線、檢查點標準生產重啟首選長交易回滾耗時
TRANSACTIONAL等待作用中交易完成(不回滾)、不允許新交易極不願回滾長交易、可接受等待若交易卡住會無限等待
ABORT立即終止進程、不檢查點、下次啟動需 Instance Recovery緊急故障、IMMEDIATE 卡住資料一致性風險最高,非計畫維護禁用

自動化腳本範本 (Shell)

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

echo "$(date) Stopping Listener..."
lsnrctl stop

echo "$(date) Backing up controlfile to trace..."
sqlplus -s / as sysdba < /tmp/kill_sessions.sql
SET HEAD OFF FEEDBACK OFF NEWPAGE NONE
SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';'
FROM v\$session WHERE username IS NOT NULL;
EOF

echo "$(date) Killing sessions..."
sqlplus -s / as sysdba @/tmp/kill_sessions.sql

echo "$(date) Shutting down IMMEDIATE..."
sqlplus -s / as sysdba <

驗收檢核清單

  • ☐ Alert Log 無 ORA- 錯誤
  • ☐ SELECT STATUS FROM V$INSTANCE 顯示 OPEN
  • ☐ 所有表空間 ONLINE(SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES)
  • ☐ Listener lsnrctl status 顯示服務 READY
  • ☐ 應用連線測試成功、關鍵交易驗收通過
  • ☐ 備份作業(RMAN/Data Pump)下一排程正常啟動

將此 SOP 納入變更管理流程、自動化腳本納入版控、每季演練一次,讓資料庫重啟成為「零驚喜、可追蹤、可驗證」的常態作業。

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