首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 表空間故障恢復全方案:用戶/臨時/系統/回滾/控制文件分類詳解

     編輯:Oracle 資料庫相關知識

表空間故障是 DBA 面臨的最高壓場景之一。本文按表空間類型劃分,提供從輕量重建到介質恢復的分級方案,覆蓋用戶、臨時、系統、回滾表空間及控制文件五大核心對象。

一、用戶表空間故障

典型錯誤

  • 啟動報 ORA-01157, ORA-01110, ORA-07360
  • 關閉報 ORA-01116, ORA-01110, ORA-07368

方案 A:可重建對象 → 離線刪除重建

STARTUP MOUNT;
ALTER DATABASE DATAFILE 'filename' OFFLINE DROP;
ALTER DATABASE OPEN;
DROP TABLESPACE tablespace_name INCLUDING CONTENTS;
-- 重建表空間與所有對象

方案 B:不可重建 → 備份恢復 + 介質恢復

  1. 從備份恢復數據文件
  2. STARTUP MOUNT
  3. 檢查 Redo 可用性:
    SELECT v1.group#, member, sequence#, first_change# FROM v$log v1, v$logfile v2 WHERE v1.group# = v2.group#;
  4. NOARCHIVELOG 模式下判斷可恢復性:
    SELECT file#, change# FROM v$recover_file;
    change# > MIN(first_change#) → 可恢復;否則退回方案 A 或全庫恢復
  5. RECOVER DATAFILE 'filename';
  6. ALTER DATABASE OPEN RESETLOGS;

只讀表空間特例

通常無需介質恢復,直接還原備份文件即可。例外:最後備份後曾切換為 READ WRITE 或 READ ONLY 模式,需介質恢復。

二、臨時表空間故障

不存儲持久數據,直接刪除重建:

DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
CREATE TEMPORARY TABLESPACE temp TEMPFILE 'path' SIZE 1G AUTOEXTEND ON;

三、系統表空間故障

核心數據字典所在,無備份只能重建資料庫。有備份時:

  1. 恢復系統表空間數據文件
  2. STARTUP MOUNT
  3. RECOVER TABLESPACE SYSTEM;
  4. ALTER DATABASE OPEN;

四、回滾表空間故障(三大場景)

場景 1:數據庫完全關閉 (SHUTDOWN IMMEDIATE/NORMAL)

  1. 確認完全關閉
  2. init.ora 註釋 ROLLBACK_SEGMENTS
  3. STARTUP RESTRICT MOUNT
  4. ALTER DATABASE DATAFILE 'filename' OFFLINE DROP;
  5. ALTER DATABASE OPEN;
  6. 若報 ORA-00604, ORA-00376, ORA-01110 → 關閉,init.ora 添加 _CORRUPTED_ROLLBACK_SEGMENTS = (...)
  7. STARTUP RESTRICT → DROP TABLESPACE ... INCLUDING CONTENTS;
  8. 重建表空間與回滾段
  9. ALTER SYSTEM DISABLE RESTRICTED SESSION;
  10. 恢復 init.ora

場景 2:非正常關閉 (CRASH / SHUTDOWN ABORT)

  1. 恢復備份文件
  2. STARTUP MOUNT
  3. ALTER DATABASE DATAFILE 'filename' ONLINE;
  4. 檢查 Redo → RECOVER DATAFILE 'filename';
  5. ALTER DATABASE OPEN;

場景 3:數據庫開啟狀態

直接 DROP ROLLBACK SEGMENT → 重建表空間與回滾段(最快)。

五、控制文件恢復

全部損壞

拷貝備份控制文件到原目錄。Raw Device 用 dd 命令:

dd if='con.bak' of='/dev/rdrd/drd1' seek=128

部分損壞

用完好控制文件啟動:
ALTER DATABASE BACKUP CONTROLFILE TO 'path'; 復制到損壞位置 → 啟動。

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