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

Oracle 表空間損壞恢復完整方案:用戶、臨時、系統、回滾、控制檔五大場景實戰

     編輯:Oracle 資料庫基礎

前言

表空間損壞表現為啟動報 ORA-01157/ORA-01110、關閉報 ORA-01116/ORA-07368。恢復策略視表空間類型、備份可用性、歸檔模式而異。本文提供五大場景分級方案。

一、用戶表空間

場景 1:物件可輕易重建(有近期匯出或 DDL 腳本)

最簡單:離線丟棄損壞資料檔 → 刪除表空間 → 重建表空間與物件

SVRMGR> STARTUP MOUNT
SVRMGR> ALTER DATABASE DATAFILE 'filename' OFFLINE DROP;
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> DROP TABLESPACE tablespace_name INCLUDING CONTENTS;
-- 重建表空間、執行 DDL、匯入資料

場景 2:物件難以重建(需介質恢復)

前提:有備份、運行歸檔模式 (ARCHIVELOG)

  1. 從備份還原損壞資料檔
  2. STARTUP MOUNT
  3. 查詢線上日誌序號:
    SELECT v1.group#, member, sequence#, first_change#
    FROM v$log v1, v$logfile v2
    WHERE v1.group# = v2.group#;
  4. 檢查恢復需求:
    SELECT file#, change# FROM v$recover_file;
    • 若 CHANGE# > 最小 FIRST_CHANGE# → 可恢復
    • 若 CHANGE# < 最小 FIRST_CHANGE# → 不可恢復,需完整恢復或採場景 1
  5. RECOVER DATAFILE 'filename';
  6. 確認恢復成功 → ALTER DATABASE OPEN RESETLOGS;

場景 3:唯讀表空間

僅需從備份還原資料檔,無需介質恢復。例外:最後備份後曾切換為 READ WRITE 或 READ ONLY,則需介質恢復。

二、臨時表空間

不含永久資料,直接刪除重建:

DROP TABLESPACE temp_ts INCLUDING CONTENTS;
CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE 'path' SIZE 100M;

三、系統表空間

核心字典儲存於此,損壞嚴重:

  • 有備份 → 還原系統表空間資料檔 → 介質恢復
  • 無備份 → 唯一出路:重建資料庫

四、回滾表空間

三種狀態分別處理:

1. 資料庫已正常關閉

  1. 確認完全關閉
  2. 修改 init.ora 註解 rollback_segments
  3. STARTUP RESTRICT MOUNT
  4. ALTER DATABASE DATAFILE 'filename' OFFLINE DROP;
  5. ALTER DATABASE OPEN;
    • 成功 → 第 7 步
    • 報 ORA-00604/ORA-00376/ORA-01110 → 第 6 步
  6. SHUTDOWN IMMEDIATE,修改 init.ora 加入:
    _corrupted_rollback_segments = (segment_name, ...)
    STARTUP RESTRICT
  7. DROP TABLESPACE rbs_ts INCLUDING CONTENTS; 重建表空間與回滾段
  8. ALTER SYSTEM DISABLE RESTRICTED SESSION;
  9. 恢復 init.ora 設定

2. 資料庫非正常關閉

  1. 還原備份
  2. STARTUP MOUNT
  3. 檢查資料檔狀態,ALTER DATABASE DATAFILE 'filename' ONLINE;
  4. 查詢日誌與恢復檔(同用戶表空間步驟 3-4)
  5. RECOVER DATAFILE 'filename';
  6. ALTER DATABASE OPEN;

3. 資料庫開啟狀態

直接刪除回滾段與表空間 → 重建。

五、控制檔恢復

1. 所有控制檔損壞

  • 檔案系統:複製備份控制檔至原目錄
  • 原始裝置:dd if=con.bak of=/dev/rdsk/drd1 seek=128

2. 部分控制檔損壞

用完好控制檔啟動:STARTUP NOMOUNT → 複製完好檔覆蓋損壞檔 → STARTUP

關鍵原則總結

表空間類型有備份+歸檔無備份/非歸檔關鍵操作
用戶介質恢復重建或近期匯入RECOVER DATAFILE
唯讀僅還原檔案僅還原檔案無需 RECOVER
臨時刪除重建刪除重建DROP/CREATE TEMPORARY
系統介質恢復重建資料庫無備份必重建
回滾視關閉狀態分級處理離線丟棄+隱藏參數_corrupted_rollback_segments
控制檔還原備份需至少一份完好多路徑多工最關鍵

核心建議:多路徑多工控制檔、啟用歸檔模式、定期驗證備份可恢復性、建立標準化恢復操作手冊。

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