ORA-06502: PL/SQL: numeric or value error ORA-06512: at "SEPDBA.PF_BACKUP_ZPXXJL_UPD", line 116 ORA-01578: ORACLE 数据块损坏(文件号45,块号436285) ORA-01110: 数据文件 45: 'U:\DZJCDB2\SEP_PIC26.DBF' ORA-02063: preceding 2 lines from LINK_DZJC ORA-06512 |
找客户确认下了,这是连接到B库报出来的错,其通过DBLINK向A库插入了条数据,但是准备使用的块有坏块
由于这个库本来有备份,但是客户一直未检查备份,最新的一次备份时间点是2007年,而且中间客户由于归档目录满,就手工删除了很多日志,根本无法进行块恢复。
还好这是个历史库,客户确认丢点数据无所谓,那就把这个块给隔离下下
一查,这个块属于一个LOB段,DBMS_REPAIR无法隔离LOB块
尝试了10231,但是无用,估计DBMS_REPAIR对插入时报告的坏块也无用(已测试,确实无用)
既然是LOB段,就是说,这个将要被插入数据的块,实际是无用的,只是一个前版本,DUMP了下这个数据块,确认这个块就存在一条数据的对象。
那么如果把这个表的数据CTAS重建一个,就可以正常的处理该问题,但是客户无那么多空间,而且,这个表有4T,无分区,911W条记录。而且又是WIN系统,不知道怎么EXP到一个NULL文件,算了,不管了
看来最后的办法只有BBED
DBV检查这个块的结果,是CHECKSUM错误,于是打算先尝试下重新计算CHECKSUM
SUM APPLY后,还是不对
BBED> set dba 1,436285 DBA 0x0046a83d (4630589 1,436285)
BBED> verify DBVERIFY - 验证正在启动 FILE =U:\DZJCDB2\SEP_PIC26.DBF BLOCK = 436285
块436285已毁坏 *** Corrupt block relative dba: 0x0b46a83d (file 0, block 436285) Fractured block found during verification Data in bad block - type: 40 format: 2 rdba: 0x0b46a83d last change scn: 0x0742.9dd0ea63 seq: 0x2 flg: 0x04 consistency value in tail: 0xfc752802 check value in block header: 0xfe5e, computed block checksum: 0x0 spare1: 0x0, spare2: 0x0, spare3: 0x0 ***
DBVERIFY - 验证完成
检查的总块数:1 已处理的总块数(数据):0 无法处理的总块数(数据):0 已处理的总块数(索引):0 无法处理的总块数(索引):0 空的总块数:0 标记为损坏的总数块:1 汇入的块总数:2
BBED> sum Check value for File 1, Block 436285: current = 0xfe5e, required = 0xfe5e |
这时已经报告了一个本质的错误:consistency value in tail
但是当时一直想着CHECKSUM,竟然忽略了本质!幸得熊哥提醒,才看到
原来就是头部的SCNBASE+TYPE+SEQ和尾部的TAIL不等
头部的值:ea632802
尾部的值:fc752802
那下来就简单了
alter session set events 'immediate trace name flush_cache';
|
set dba 1, 436285
dump count 16384
find /x 0228fc75
modify /x 022863ea
dump
sum apply
verify
|
验证无问题
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-665672/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8242091/viewspace-665672/