資料庫區塊損壞屬嚴重故障,恢復操作極具風險。建議: 嘗試恢復前務必完整備份;關鍵系統無把握時諮詢專業 DBA。
BLOCK、使用者 EYGLE、測試表 T 並插入 8192 筆資料。SHUTDOWN IMMEDIATE 關閉資料庫。BLOCK.DBF 內容。T 觸發 ORA-01578 (區塊損壞) 與 ORA-01110。dbv file=block.dbf blocksize=8192
輸出顯示相對 DBA 0x01000023 (檔案 4, 區塊 35) 與 0x01000045 (檔案 4, 區塊 69) 校驗和不符,標記為損壞。
SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = 4
AND 35 BETWEEN block_id AND block_id + blocks - 1;
確認損壞物件為 EYGLE.T 表。
ALTER SYSTEM SET EVENTS='10231 trace name context forever, level 10';
事件 10231 使全表掃描跳過損壞區塊。
exp eygle/eygle file=t.dmp tables=t
成功匯出 8036 筆,損失 156 筆資料。
DROP TABLE t;
imp eygle/eygle file=t.dmp tables=t
匯入 8036 筆,恢復完成。
DB_BLOCK_CHECKSUM、DB_BLOCK_CHECKING 早期發現損壞。VALIDATE。FLASHBACK 技術。