oracle 验证 lob 坏块,一次数据块损坏(包含LOB类型值),修复数据库的案例

客户突然报告数据库警告日志中出现ora-00600错误,不能进行冷备份的拷贝数据文件,造成日常备份不能正常进行。检查及解决过程如下:

1 用dbv工具检查出错的文件,但是报告I/O错误,dbv不能正常检测出结果。

2 用rman工具进行数据库热备份,结果在备份过程中报I/O错误,找到文件号和块号,用如下语句查询块的信息:

select * FROM dba_extents WHERE file_id='7' and block_id<=173494 and (block_id + blocks- 1) >= 173494

结果segment_type为lob型。在用下面语句检查:

SELECT * FROM dba_lobs WHERE segment_name='SYS_LOB0000054743C00004$$'

查询结果如下:

FNDCN_MESSAGE_BODY_TAB        MESSAGE_VALUE        SYS_LOB0000054743C00004$$        IFSAPP_LOB        SYS_IL0000054743C00004$$        8192        50                        NO        YES        NO        NOT APPLICABLE         NO

发现是这个表。在应用系统中这个表只是记录消息日志的,即便清空,也不会对应用产生任何问题,但最为DBA,能尽量恢复就尽量恢复吧。继续往下做:

3 试着表迁移来做数据导出。

迁移lob类型的数据到另外一个表

ALTER TABLE FNDCN_MESSAGE_BODY_TAB MOVE LOB(message_value) STORE AS FNDCN_MESSAGE_BODY_TAB (

TABLESPACE ifsapp_data

DISABLE STORAGE IN ROW

CHUNK 16384

FREEPOOLS 1

NOCACHE

PCTVERSION 20);

但是还是报ora-01555的错误。

4 再用exp把这个表的数据倒出来,结果报

EXP-00056: ORACLE error 1115 encountered

ORA-01115: IO error reading block from file 7 (block # 173494)

ORA-27072: File I/O error

这个错误,修改这个表中的LOB存储参数,

ALTER TABLE ifsapp.FNDCN_MESSAGE_BODY_TAB  STORAGE as (PCTVERSION 20)。在进行导出,还是报错,加大PCTVERSION 的值,还是报错。用dbms_repair来忽略坏块也还是不行。

无奈,只能用query参数来递增的导出数据。语句如下:

exp '"sys/oracle@prodzs as sysdba"' tables=ifapp.FNDCN_MESSAGE_BODY_TAB

file='/emc/data/hotbackup/table4000.dmp' log='/emc/data/hotbackup/table.log' query=\"where application_message_id\<5600\"

这个表最多有5664条记录,5600是导出的上限,5601都报ora-01555的错误。只能导出5600条记录了。

5 用内部事件来屏蔽全表扫描的时候忽略坏块。

alter system set events='10231 trace name context for ever,level 10'

6 做全数据库的导出,之所以作数据库的逻辑导出,是因为这个dbf文件既不能拷贝,也不能用备份的有效的文件来覆盖。所以我决定重新逻辑导出,在全库导入。我试过用rman来做热备的克隆,但是在rman备份过程中坏块始终过不去,即便设置了内部事件和用dbms_repair来忽略坏块。我想不明白。有明白的人可以告诉我原因,谢谢!!

7 创建新库,导入数据,然后再把FNDCN_MESSAGE_BODY_TAB的数据导进新创建的数据库。

遗留问题: 虽然解决了文件不能拷贝复制的问题,但毕竟还是丢了54条数据,不知哪位高手知道如何才能不丢失这54条数据呢。万一是业务表,我可就束手无策了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值