損壞的資料區塊:格式非 Oracle 可識別,或內容邏輯不一致。分類:
ORA-01578: ORACLE data block corrupted (file # %s, block # %s)
ORA-01110 顯示絕對檔號動態參數,修改即時生效:
ALTER SYSTEM SET DB_BLOCK_CHECKING = FULL SCOPE=BOTH;
| 值 | 檢查程度 | 開銷 |
|---|---|---|
| OFF | 僅 SYSTEM 表空間檢查 | 無 |
| LOW | 記憶體中區塊變更後基本 Header 檢查 | 1%~3% |
| MEDIUM | LOW + 非索引組織表語意檢查 | 3%~7% |
| FULL | MEDIUM + 索引區塊語意檢查 | 5%~10% |
特點:降低 MTTR、資料檔保持 ONLINE、僅損壞區塊不可存取、使用 RMAN RECOVER ... BLOCK。
記錄被標記為損壞的區塊:
BACKUP ... VALIDATE CHECK LOGICAL 啟用-- 單一區塊 RECOVER DATAFILE 7 BLOCK 3; -- 多區塊多檔案 RECOVER DATAFILE 2 BLOCK 43, DATAFILE 2 BLOCK 79, DATAFILE 6 BLOCK 183; -- 恢復視圖中所有損壞區塊 RECOVER CORRUPTION LIST;
LIST FAILURE、VALIDATE、BACKUP VALIDATE 結果V$DATABASE_BLOCK_CORRUPTIONV$DIAG_INFO 查詢路徑)ANALYZE TABLE/INDEX VALIDATE STRUCTURE-- 開啟事件 ALTER SYSTEM SET EVENTS='10231 trace name context forever, level 10'; -- 匯出損壞表 (跳過壞區塊) EXP test/test FILE=t.dmp TABLES=t; -- 刪除並重建 DROP TABLE t; IMP test/test FILE=t.dmp TABLES=t; -- 關閉事件 ALTER SYSTEM SET EVENTS='10231 trace name context off';
警告:10231 會跳過壞區塊直接讀取,可能導致資料遺失或邏輯不一致,僅限緊急救援並需事後驗證資料完整性。