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

Oracle 7.x 回滾段資料檔誤刪救援:Mount 階段離線 Drop 重建全流程

     編輯:Oracle 資料庫基礎

故障現象

使用者誤刪除回滾段表空間 RBS 的資料檔 rbs01.dbf,導致資料庫無法正常啟動(ORA-01157、ORA-01110)。

核心原理

  • 回滾段記錄交易變更,支援**讀一致性**與**交易回滾**。
  • SYSTEM 表空間內建 SYSTEM 回滾段,資料庫啟動**必須**上線。
  • 公用回滾段故障時,可暫用 SYSTEM 回滾段啟動資料庫至 MOUNT 階段進行修復。

救援步驟詳解

階段 1:修改參數檔,以 SYSTEM 回滾段啟動至 MOUNT

SVRMGR> SHUTDOWN ABORT
$ vi $ORACLE_HOME/dbs/init.ora
rollback_segments = (system)
_corrupted_rollback_segments = (r01,r02,r03,r04)  -- 標記損壞段跳過
SVRMGR> STARTUP MOUNT

階段 2:離線損壞檔、資料庫恢復、RESETLOGS 開啟

SVRMGR> ALTER DATABASE DATAFILE '##/##/rbs01.dbf' OFFLINE DROP;
SVRMGR> RECOVER DATABASE USING BACKUP CONTROLFILE;
-- 若提示指定日誌,依 sequence# 提供線上重做日誌路徑
SVRMGR> ALTER DATABASE OPEN RESETLOGS;
  • OFFLINE DROP:從控制檔移除檔案,避免後續恢復嘗試讀取。
  • USING BACKUP CONTROLFILE:控制檔與資料檔 SCN 不一致時必須指定。
  • RESETLOGS:重置重做日誌序列,產生新化身。

階段 3:清除舊回滾段與表空間

SVRMGR> ALTER ROLLBACK SEGMENT r01 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r02 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r03 OFFLINE DROP;
SVRMGR> ALTER ROLLBACK SEGMENT r04 OFFLINE DROP;
SVRMGR> DROP TABLESPACE rbs INCLUDING CONTENTS;

階段 4:重建回滾段表空間與段


SVRMGR> CONNECT INTERNAL
SVRMGR> CREATE ROLLBACK SEGMENT ro TABLESPACE system;  -- 臨時段
SVRMGR> ALTER ROLLBACK SEGMENT ro ONLINE;
SVRMGR> CREATE TABLESPACE rbs DATAFILE '##/##/rbs01.dbf' SIZE ##K;
SVRMGR> CREATE ROLLBACK SEGMENT r01 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r02 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r03 TABLESPACE rbs;
SVRMGR> CREATE ROLLBACK SEGMENT r04 TABLESPACE rbs;
SVRMGR> ALTER ROLLBACK SEGMENT r01 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r02 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r03 ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT r04 ONLINE;

階段 5:切換參數檔,正常啟動


SVRMGR> SHUTDOWN ABORT
$ vi $ORACLE_HOME/dbs/init.ora
rollback_segments = (r01,r02,r03,r04)
-- 移除 _corrupted_rollback_segments
SVRMGR> STARTUP

關鍵注意事項

  1. 歸檔模式:本流程假設資料庫運行於歸檔模式,擁有完整重做日誌鏈。
  2. 控制檔備份:RECOVER DATABASE USING BACKUP CONTROLFILE 需有可用控制檔備份或追蹤檔。
  3. 臨時回滾段 ro:建立於 SYSTEM 表空間,僅供重建過程使用,後續可刪除。
  4. 版本適用:Oracle 7.x / 8i / 9i 均適用;10g+ 採用 Undo 表空間,流程不同(參考 ALTER DATABASE DATAFILE ... OFFLINE DROP → CREATE UNDO TABLESPACE → 切換 UNDO_TABLESPACE 參數)。

驗證與事後

  • 查詢 DBA_ROLLBACK_SEGS 確認所有段 STATUS = ONLINE。
  • 執行 SELECT * FROM V$ROLLSTAT 觀察使用狀況。
  • 建立定期備份策略(RMAN),避免單點故障導致資料遺失。

結語

回滾段資料檔誤刪是經典災難場景。核心邏輯:**以 SYSTEM 回滾段繞過損壞段啟動 → 離線損壞檔並 RESETLOGS 重置 → 重建回滾段體系**。熟練掌握此流程,可在無備份檔案情況下最大程度挽救業務資料(僅丟失回滾段內未提交交易)。

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