一. 出问题时的情景
我在自己测试数据库上给大表tb_table导完数据后,建立索引时,出现以下错误
ORA-01578: ORACLE data block corrupted (file # 7, block # 28969)ITPUB个人空间#d
t,{~"i1j
ORA-01110: data file 7: 'D:\ORACLE\ORADATA\PAUL\GAME_LARGE.DBF'
查看alert.log日志时有以下错误
Corrupt block relative dba: 0x01c07129 (file 7, block 28969)
Bad check value found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x01c07129
last change scn: 0x0000.00035361 seq: 0x1 flg: 0x04
consistency value in tail: 0x53610601
check value in block header: 0x302a, computed block checksum: 0x8
spare1: 0x0, spare2: 0x0, spare3: 0x0
二. 解决方法
1.执行以下语句看哪个段坏了
selectsegment_type,owner||'.'||segment_nameITPUB个人空间$VW1[~7@t
fromdba_extents
T~wF[%?0x0where7= file_idand28969betweenblock_idandblock_id+blocks -1
segment_type owner.segment_name
TABLE PARTITION PAUL.TB_CASHFLOW_LOG
2.使用诊断事件
如果损失的是数据,ok
wZCG4}._0我们可以设置内部事件,使exp跳过这些损坏的block
SQL> ALTER SYSTEM SET EVENTS ‘10231 trace name context forever,level10’;
取消内部事件设置
如果你在初始化参数中设置的,注视之ITPUB个人空间;C
c'GFsg
如果在命令行设置的ITPUB个人空间5?5djwFQ+z3i6Vo}6B
alter system set events='10231 trace name context off';
3、创建一个临时表tb_cashflow_log_tmp的表中除坏块的数据都检索出来
$a
e6g x&D$P&|XW0ITPUB个人空间x+U%t~Z7xg
SQL>CREATE TABLE tb_cashflow_log_tmp as select * from tb_cashflow_log;ITPUB个人空间*X4n+M+AF&q