ORA-01578 ORA-01110 問題解決(這個是在沒有rman備份的情況下)

用dbv看

DBV FILE="/data/oradata/boss/sxwgtbs04.dbf" blocksize=8192

Total Pages Examined         : 655360
Total Pages Processed (Data) : 78829
Total Pages Failing   (Data) : 4
Total Pages Processed (Index): 24564
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 4194
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 547773
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 88314713 (0.88314713)


SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTENTS WHERE file_id = 8 AND 38029 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS -1;

找到是一個表。


create table COMPMNT.ALM_HISTORY_COPY as select * from COMPMNT.ALM_HISTORY;
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 8, block # 38029)
ORA-01110: data file 8: '/data/oradata/boss/sxwgtbs04.dbf'


select index_name,owner from dba_indexes where table_name='ALM_HISTORY';
select index_name,owner,table_name from dba_indexes where owner='COMPMNT';

看到該表沒有任何索引

conn compmnt/compmnt  

--這裏必須使用該用戶,如果不是該用戶不能rename
rename COMPMNT.ALM_HISTORY to COMPMNT.ALM_HISTORY_BAK;
rename COMPMNT.ALM_HISTORY_COPY to COMPMNT.ALM_HISTORY;
ORA-01765: specifying owner's name of the table is not allowed

alter session SET EVENTS '10231 trace name context forever,level 10';  (一般用戶也可以)

create table COMPMNT.ALM_HISTORY_COPY as select * from COMPMNT.ALM_HISTORY;(不使用10231事件也不能創建表,因爲曾經試過連查詢壞表都做不到)


rename ALM_HISTORY to ALM_HISTORY_BAK;  (實際解決中這兩個rename是沒有添加10231事件的,因爲當時用dba發現rename不了才用回原用戶,發現不用10231事件也可以rename)
rename ALM_HISTORY_COPY to ALM_HISTORY;

本來在rename之後應該alter index indexname rebuild;
但是看到該表沒有任何索引。另外實際上rname之後原索引還是會跟着原表,我所創建的新表也是不會有索引,及時rebuilt索引之後也是如此,所以應該需要獲取索引ddl來爲新表進行索引的建立。

alter session SET EVENTS '10231 trace name context off';

後面我也沒刪除ALM_HISTORY_BAK這個表,我也不知道怎麼辦,不過有這個表在至少新建的表不會使用到這個壞塊吧
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章