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这个表,我也不知道怎么办,不过有这个表在至少新建的表不会使用到这个坏块吧

你可能感兴趣的:(数据库,坏块)