回滾段 (Rollback Segment) 損壞導致資料庫無法正常開啟,或需重整回滾段表空間 (RBS) 結構。操作涉及 RESETLOGS 且不可逆,執行前務必完整冷備份 (含控制檔、資料檔、參數檔、重做日誌)。
SHUTDOWN ABORT)RECOVER DATABASE USING BACKUP CONTROLFILE)ALTER DATABASE OPEN RESETLOGS-- 1. 關閉
SHUTDOWN ABORT;
-- 2. 編輯 init.ora
rollback_segments = (system)
_corrupted_rollback_segments = (r01,r02,r03,r04)
_allow_resetlogs_corruption = true
-- 3. MOUNT
STARTUP MOUNT;
-- 4. OFFLINE DROP RBS 資料檔 (每個檔案執行一次)
ALTER DATABASE DATAFILE '/path/rbs01.dbf' OFFLINE DROP;
-- 5. 恢復 (提示指定日誌時輸入 CANCEL)
RECOVER DATABASE USING BACKUP CONTROLFILE;
-- 輸入: CANCEL
-- 6. RESETLOGS 開啟
ALTER DATABASE OPEN RESETLOGS;
-- 7. 刪除舊回滾段
ALTER ROLLBACK SEGMENT r01 OFFLINE DROP;
ALTER ROLLBACK SEGMENT r02 OFFLINE DROP;
ALTER ROLLBACK SEGMENT r03 OFFLINE DROP;
ALTER ROLLBACK SEGMENT r04 OFFLINE DROP;
DROP TABLESPACE rbs INCLUDING CONTENTS;
-- 8. 重建
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;
CREATE ROLLBACK SEGMENT r02 TABLESPACE rbs;
CREATE ROLLBACK SEGMENT r03 TABLESPACE rbs;
CREATE ROLLBACK SEGMENT r04 TABLESPACE rbs;
ALTER ROLLBACK SEGMENT r01 ONLINE;
ALTER ROLLBACK SEGMENT r02 ONLINE;
ALTER ROLLBACK SEGMENT r03 ONLINE;
ALTER ROLLBACK SEGMENT r04 ONLINE;
-- 9. 還原參數檔並重啟
SHUTDOWN ABORT;
-- 編輯 init.ora: 移除 _corrupted_rollback_segments, _allow_resetlogs_corruption
-- rollback_segments = (r01,r02,r03,r04)
STARTUP;
OFFLINE DROP 會拋棄未歸檔的重做資訊,RESETLOGS 會重置日誌序號,導致現有備份無法直接用於時間點恢復 (PITR)。_corrupted_rollback_segments、_allow_resetlogs_corruption 為非文件化參數,僅限 Oracle 支援指導下使用。UNDO_MANAGEMENT=AUTO),回滾段管理自動化,較少遭遇手動重建情境。-- 建立新 UNDO 表空間
CREATE UNDO TABLESPACE undotbs DATAFILE '/path/undotbs01.dbf' SIZE 500M AUTOEXTEND ON;
-- 切換 (需重啟或動態切換)
ALTER SYSTEM SET undo_tablespace = undotbs SCOPE=BOTH;
ALTER SYSTEM SET undo_management = AUTO SCOPE=SPFILE;
-- 重啟生效
自動 Undo 管理消除手動管理回滾段的複雜度,強烈建議 9i 以上版本採用。