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

Oracle 資料庫優雅重啟十步驟:應用層停止、備份控制檔、切換 Redo、終結 Session、IMMEDIATE 關機與啟動驗證

     編輯:Oracle 資料庫基礎

標準重啟 SOP (適用計畫性維護)

  1. 停止應用層:通知業務、關閉中介軟體、連線池、排程作業
  2. 停止監聽器:
    lsnrctl stop
    防止新連線湧入
  3. 備份控制檔追蹤 (Sysdba):
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    產生 USER_DUMP_DEST 下 *_ora_*.trc 含 CREATE CONTROLFILE 腳本
  4. 手動切換 Redo Log:
    ALTER SYSTEM SWITCH LOGFILE;
    確保當前 Redo 寫入磁碟、檢查點推進
  5. 產生 Kill Session 腳本:
    SET HEAD OFF FEEDBACK OFF NEWPAGE NONE
    SPOOL /tmp/kill_sessions.sql
    SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''' IMMEDIATE;'
    FROM v$session WHERE username IS NOT NULL;
    SPOOL OFF
  6. 執行 Kill Session:
    @/tmp/kill_sessions.sql
    IMMEDIATE 讓交易回滾、釋放鎖
  7. IMMEDIATE 關閉資料庫:
    SHUTDOWN IMMEDIATE;
    等待完成、不接受新連線、回滾未提交交易、檢查點、關閉檔案
  8. 啟動監聽器:
    lsnrctl start
  9. 啟動資料庫:
    SQLPLUS /NOLOG
    CONN / AS SYSDBA
    STARTUP;
    或 SRVCTL START DATABASE -d dbname (RAC/Grid)
  10. 啟動應用層並驗證:
    • 檢查 Alert Log 無錯誤
    • SELECT status FROM v$instance; → OPEN
    • 核心業務 SQL 測試
    • 監聽器狀態 lsnrctl status

關機模式對比

模式等待現有連線回滾未提交檢查點適用場景
NORMAL是 (無限)否是極少用
TRANSACTIONAL是 (交易完成)否是溫和關機
IMMEDIATE否 (立即斷開)是是標準維護
ABORT否 (強制)否 (啟動時恢復)否緊急/掛死

RAC 環境滾動重啟

# 節點 1
srvctl stop instance -d dbname -i inst1 -o immediate
srvctl start instance -d dbname -i inst1
# 驗證節點 1 正常後,依序處理節點 2, 3...
# 全叢集重啟
srvctl stop database -d dbname -o immediate
srvctl start database -d dbname

Data Guard 環境注意事項

  • Primary 關機前確認 Standby 應用完所有 Redo:SELECT * FROM v$archive_gap; 無列
  • Standby 先關機、Primary 後關機;啟動順序相反
  • 使用 DGMGRL 管理切換/容錯移轉

重啟後驗證清單

檢查項目命令/方法預期結果
執行個體狀態SELECT status FROM v$instance;OPEN
Alert Log 錯誤tail -f alert_.log無 ORA- 錯誤
資料檔線上SELECT file#, status FROM v$datafile;全部 ONLINE
Redo Log 正常SELECT group#, status FROM v$log;CURRENT/ACTIVE/INACTIVE
表空間狀態SELECT tablespace_name, status FROM dba_tablespaces;ONLINE
無效物件SELECT count(*) FROM dba_objects WHERE status='INVALID';0 (或已知可接受)
監聽器服務lsnrctl status所有服務 READY
應用連線測試應用健康檢查端點成功

自動化腳本範例 (Shell)

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

echo "1. Stopping listener..."
lsnrctl stop

echo "2. Backup controlfile..."
sqlplus -s / as sysdba <
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved