表空間故障是DBA最常面對的核心挑戰。本文依據表空間類型(用戶、臨時、系統、回滾、控制文件)與數據庫狀態(打開、掛載、關閉),提供分級恢復方案,助你從容應對ORA-01157、ORA-01110等經典錯誤。
ORA-01157、ORA-01110或OS級ORA-07360ORA-01116、ORA-01110、ORA-07368STARTUP MOUNT;
ALTER DATABASE DATAFILE 'filename' OFFLINE DROP;
ALTER DATABASE OPEN;
DROP TABLESPACE ts_name INCLUDING CONTENTS;
-- 重建表空間、對象、導入數據
適用:近期有導出、對象DDL可腳本化、數據可重新加載。
STARTUP MOUNTSELECT v1.group#, member, sequence#, first_change# FROM v$log v1, v$logfile v2 WHERE v1.group#=v2.group#;SELECT file#, change# FROM v$recover_file;change# > min(first_change#) 可恢復,否則退回方案A或全庫恢復。RECOVER DATAFILE 'filename';ALTER DATABASE OPEN RESETLOGS;原則:無需介質恢復,直接還原備份文件即可。
例外:備份後曾切換為READ WRITE或再次READ ONLY,則需介質恢復。
不存儲持久數據,恢復最簡單:
DROP TABLESPACE temp_ts INCLUDING CONTENTS AND DATAFILES;
CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE '...' SIZE ... AUTOEXTEND ON;
核心字典損壞,若無有效備份唯一出路是重建數據庫。平時必須:
分三種數據庫狀態處理:
-- 1. 確認關閉
-- 2. 註釋 init.ora 中 rollback_segments
STARTUP RESTRICT MOUNT;
ALTER DATABASE DATAFILE 'undo_file' OFFLINE DROP;
ALTER DATABASE OPEN;
-- 若報 ORA-00376/ORA-01110
SHUTDOWN IMMEDIATE;
-- 3. 設置隱藏參數跳過損壞回滾段
_corrupted_rollback_segments = (_SYSSMU1$, _SYSSMU2$)
STARTUP RESTRICT;
DROP TABLESPACE undo_ts INCLUDING CONTENTS;
-- 重建 UNDO 表空間與回滾段
ALTER SYSTEM DISABLE RESTRICTED SESSION;
-- 恢復 init.ora 參數
-- 1. 還原備份文件
STARTUP MOUNT;
ALTER DATABASE DATAFILE 'undo_file' ONLINE;
-- 檢查日誌與恢復文件 SCN
SELECT v1.group#, member, sequence#, first_change# FROM v$log v1, v$logfile v2 WHERE v1.group#=v2.group#;
SELECT file#, change# FROM v$recover_file;
RECOVER DATAFILE 'undo_file';
ALTER DATABASE OPEN;
直接離線刪除並重建:
DROP ROLLBACK SEGMENT ...;
DROP TABLESPACE undo_ts INCLUDING CONTENTS;
CREATE UNDO TABLESPACE undo_ts ...;
ALTER SYSTEM SET UNDO_TABLESPACE = undo_ts;
cp control.bak /oradata/control01.ctldd if=con.bak of=/dev/rdsk/c0t1d0s1 seek=128刪除損壞副本,修改CONTROL_FILES參數指向完好副本,STARTUP即可。
| 場景 | 關鍵決策點 | 禁忌操作 |
|---|---|---|
| 用戶表空間 | 對象可否重建? | NOARCHIVELOG下強行RECOVER導致數據不一致 |
| UNDO表空間 | 數據庫狀態(OPEN/MOUNT/ABORT) | OPEN狀態直接OFFLINE DROP活躍UNDO文件 |
| 系統表空間 | 備份可用性 | 嘗試手工修復字典對象 |
| 控制文件 | 是否全部損壞 | 單副本環境不備份控制文件 |
恢復的核心是備份策略決定恢復選項。建立「每日Level 0 + 每小時Level 1 + 實時歸檔備份」的RMAN策略,配合定期恢復演練,才是治本之道。