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

Oracle 回滾段損壞重建完整操作手冊

     編輯:Oracle 資料庫基礎

適用場景

回滾段 (Rollback Segment) 損壞導致資料庫無法正常開啟,或需重整回滾段表空間 (RBS) 結構。操作涉及 RESETLOGS 且不可逆,執行前務必完整冷備份 (含控制檔、資料檔、參數檔、重做日誌)。

重建步驟概覽

  1. 關閉資料庫 (SHUTDOWN ABORT)
  2. 修改參數檔:指定僅使用 SYSTEM 回滾段、標記損壞段、允許 RESETLOGS 損壞
  3. MOUNT 資料庫
  4. 將 RBS 表空間資料檔 OFFLINE DROP
  5. 使用備份控制檔恢復資料庫 (RECOVER DATABASE USING BACKUP CONTROLFILE)
  6. ALTER DATABASE OPEN RESETLOGS
  7. 刪除舊回滾段與 RBS 表空間
  8. 重建 RBS 表空間與新回滾段
  9. 還原參數檔並正常啟動

詳細命令序列

-- 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 支援指導下使用。
  • 版本差異:Oracle 9i+ 建議改用 Undo 表空間 (UNDO_MANAGEMENT=AUTO),回滾段管理自動化,較少遭遇手動重建情境。
  • 事前準備:確認備份控制檔可用、歸檔日誌完整、有足夠磁碟空間重建 RBS 檔案。

現代替代方案:遷移至自動 Undo 管理

-- 建立新 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 以上版本採用。

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