設定 EVENT 10231 跳過壞塊

kewin發表於2011-09-15
設定 EVENT 10231 跳過壞塊
Kevin Zou
2011-9-15
如果TABLE/INDEX中遇到了壞塊,那ORACLE在做FTS或者對應的BLOCK index讀時,會報ORA-01578
ORA-01578: ORACLE data block corrupted (file # 5, block # 5311)
ORA-01110: data file 5: 'D:\ORACLE\ORADATA\TEST\KK01.DBF'

可以啟用10231 EVENT來跳過壞塊。Event 10231 允許Oracle 在全表掃描時可以忽略某些損壞的資料塊來檢索資料,它允許使用者執行 export 或 "create table as select" 操作來找回在資料檔案中那些沒有損壞的資料。在損壞快上的資料將被丟失。

語法:
ALTER SYSTEM SET EVENTS '10231 trace name context forever,level 10' ;
設定了該EVENT,在做SELECT 時,系統還是會報錯,但可以EXPORT或者CREATE TABLE AS。(這個我沒有驗證過)
如果知道損壞的BLOCK是屬於那個OBJECT,那可以用DBMS_REPAIR.SKIP_CORRUPT_BLOCKS 來處理。
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
schema_name IN VARCHAR2,
object_name IN VARCHAR2,
object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT,
flags IN BINARY_INTEGER DEFAULT SKIP_FLAG);

如果是KK的TEST1 table有壞塊,那可以:
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('KK','TEST1');

SQL> EXEC DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('KK','TEST1');

PL/SQL 過程已成功完成。
匯出建立後,通過使用noskip_flag 恢復正常掃描
begin
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('KK','TEST1',flags=>dbms_repair.noskip_flag);
END

-THE END-

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/40239/viewspace-707444/,如需轉載,請註明出處,否則將追究法律責任。

相關文章