ORA-01157、ORA-01110、OS錯誤ORA-07360ORA-01116、ORA-01110、OS錯誤ORA-07368
用戶表空間故障
│
├─ 對象可重建?(近期導出/DDL腳本/數據可重載)
│ │
│ ├─ 是 → 方案A:離線刪除重建(最快)
│ │
│ └─ 否 → 方案B:介質恢復(需備份+歸檔)
│
└─ 僅讀表空間?
├─ 備份後未切寫 → 僅還原文件
└─ 備份後切寫過 → 介質恢復
STARTUP MOUNT;
ALTER DATABASE DATAFILE 'faulty_file.dbf' OFFLINE DROP;
ALTER DATABASE OPEN;
DROP TABLESPACE faulty_ts INCLUDING CONTENTS;
-- 重建表空間
CREATE TABLESPACE faulty_ts
DATAFILE '/u01/oradata/PROD/faulty_ts01.dbf' SIZE 1G AUTOEXTEND ON;
-- 重建對象(執行DDL腳本)
@rebuild_objects.sql
-- 導入數據(若有導出)
IMPDP ... TABLES=... REMAP_TABLESPACE=OLD_TS:FAULTY_TS
-- 1. 從備份還原數據文件
$ rman TARGET /
RMAN> RESTORE DATAFILE '/u01/oradata/PROD/faulty_ts01.dbf';
-- 2. 掛載並確認日誌邊界
STARTUP MOUNT;
SELECT v1.group#, v1.sequence#, v1.first_change#, v2.member
FROM v$log v1 JOIN v$logfile v2 ON v1.group# = v2.group#;
-- 3. 檢查可恢復性(NOARCHIVELOG模式關鍵)
SELECT file#, change# FROM v$recover_file;
-- change# > MIN(first_change#) 可恢復,否則退回方案A
-- 4. 執行恢復
RECOVER DATAFILE '/u01/oradata/PROD/faulty_ts01.dbf';
-- 5. 驗證並打開
ALTER DATABASE OPEN RESETLOGS; -- 若使用備份控制文件/不完整恢復
-- 或
ALTER DATABASE OPEN; -- 完全恢復
原則:直接還原備份文件,無需介質恢復。
例外:備份後曾READ WRITE或再次READ ONLY → 需介質恢復。
DROP TABLESPACE temp_ts INCLUDING CONTENTS AND DATAFILES;
CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE '...' SIZE ... AUTOEXTEND ON;
無備份 → **唯一出路:重建數據庫**。
平時必須:RMAN每日Level 0 + 歸檔實時備份 + 控制文件多路復用。
參考《Oracle UNDO表空間全生命周期管理》分三種實例狀態處理(OPEN/MOUNT/ABORT)。
RESTORE CONTROLFILE / 裸設備ddCONTROL_FILES指向完好副本,STARTUPONLINE REDO LOG覆蓋點,超出則不可恢復。OFFLINE DROP後數據文件從控制文件移除,**不可再ONLINE**,僅能重建/恢復。RESETLOGS打開後,舊備份/歸檔失效,**必須立即建立新Level 0備份**。表空間重建雙軌制:可重建走離線重建(快),不可重建走介質恢復(穩)。核心前提是**備份策略決定恢復選項**。建立「每日Level 0 + 每小時Level 1 + 實時歸檔」RMAN體系,配合季度恢復演練,才是治本之道。