使用者誤刪回滾表空間 (RBS) 資料檔 rbs01.dbf,導致資料庫無法正常啟動。核心策略:利用 System 回滾段啟動至 Mount 階段,離線損壞檔案並恢復,重建回滾表空間與段,最後切換回正常回滾段啟動。
-- 修改參數檔
rollback_segments=(system)
_corrupted_rollback_segments=(r01,r02,r03,r04)
STARTUP MOUNT
System 回滾段為資料庫建立時自動創建、永遠在線,可暫時替代公用回滾段。
ALTER DATABASE DATAFILE 'path/rbs01.dbf' OFFLINE DROP;
RECOVER DATABASE USING BACKUP CONTROLFILE;
-- 依提示應用線上/歸檔日誌至完成
ALTER DATABASE OPEN RESETLOGS;
OFFLINE DROP 將檔案從控制檔移除;USING BACKUP CONTROLFILE 因 Resetlogs 需重建控制檔資訊。
ALTER ROLLBACK SEGMENT r01 OFFLINE DROP;
... (r02-r04 同)
DROP TABLESPACE rbs INCLUDING CONTENTS;
CREATE ROLLBACK SEGMENT ro TABLESPACE system;
ALTER ROLLBACK SEGMENT ro ONLINE;
CREATE TABLESPACE rbs DATAFILE 'path/rbs01.dbf' SIZE 100M;
CREATE ROLLBACK SEGMENT r01 TABLESPACE rbs;
... (r02-r04 同)
ALTER ROLLBACK SEGMENT r01 ONLINE;
... (r02-r04 同)
-- 修改參數檔
rollback_segments=(r01,r02,r03,r04)
-- 移除 _corrupted_rollback_segments
SHUTDOWN ABORT
STARTUP
_corrupted_rollback_segments 為隱藏參數,標記損壞段避免啟動時嘗試上線。RECOVER DATABASE,需考慮其他方案(如重建資料庫)。此流程展示了 Oracle 利用 System 回滾段作為「救生圈」、結合 OFFLINE DROP 與 RESETLOGS 重建一致性的經典恢復模式。掌握此流程可在回滾表空間介質損壞時快速恢復業務,且不影響使用者資料。