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

Oracle 回滾段表空間資料檔遺失/損壞:線上資料庫與離線資料庫的分級恢復策略

     編輯:Oracle 資料庫基礎

場景二:資料庫正在運行(線上恢復)

檢測到回滾段表空間資料檔遺失/損壞時,**切勿關閉資料庫**。線上狀態提供更多恢復選項。

策略 A:離線損壞檔案並從備份恢復(需歸檔模式)

  1. ALTER DATABASE DATAFILE 'full_path' OFFLINE;
  2. 建議:建立臨時回滾表空間與段,維持業務運作。
  3. 從備份還原資料檔(必要時 ALTER DATABASE RENAME FILE)。
  4. 查詢線上重做日誌序列:
    SELECT v1.group#, member, sequence# FROM v$log v1, v$logfile v2 WHERE v1.group#=v2.group#;
  5. RECOVER DATAFILE 'full_path'; 應用歸檔與線上日誌至「Media recovery complete」。
  6. ALTER DATABASE DATAFILE 'full_path' ONLINE;

策略 B:重建回滾表空間(不限歸檔/非歸檔)

  1. 離線該表空間所有回滾段:
    ALTER ROLLBACK SEGMENT <seg> OFFLINE; 重複執行至全離線。
  2. 確認狀態:
    SELECT segment_name, status FROM dba_rollback_segs WHERE tablespace_name='RBS'; 必須全為 OFFLINE。
  3. 刪除離線段:DROP ROLLBACK SEGMENT <seg>;
  4. 處理仍為 ONLINE 的段(含 PENDING OFFLINE):
    查詢活躍事務:
    SELECT segment_name, xacts active_tx, v.status FROM v$rollstat v, dba_rollback_segs WHERE tablespace_name='RBS' AND segment_id=usn;
    若有事務,查詢會話並殺掉:
    SELECT s.sid, s.serial#, s.username, r.name rollback FROM v$session s, v$transaction t, v$rollname r WHERE r.name IN (...) AND s.taddr=t.addr AND t.xidusn=r.usn;
    ALTER SYSTEM KILL SESSION 'sid,serial#'; 重複至無事務,再確認 OFFLINE 並 DROP。
  5. DROP TABLESPACE rbs INCLUDING CONTENTS;(失敗請聯繫 Oracle Support)。
  6. 重建表空間、回滾段、上線段。

實測模擬步驟(僅限測試環境)

  1. 建立獨立 RBS 表空間與回滾段 rbs_test。
  2. 指定事務使用該段:SET TRANSACTION USE ROLLBACK SEGMENT rbs_test; INSERT ...
  3. 另開會話 SHUTDOWN ABORT 強制中斷。
  4. 重命名/刪除 RBS 資料檔模擬遺失。
  5. 依上述流程嘗試恢復驗證。

譯者心得

回滾段表空間檔案損壞屬高頻棘手故障(介質損壞、誤操作、斷電等)。關鍵在於:線上資料庫勿關機、歸檔模式優先檔案級恢復、非歸檔或備份不可用時重建表空間、殺掉阻礙離線的活躍事務。實戰演練是掌握此類恢復的唯一途徑。

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