oracle exp调过坏块,ORA-01578 ORA-01110数据文件出现坏块时跳过损坏的块 解决方法

ORA-01578: ORACLE 数据块损坏(文件号4,块号293465)

ORA-01110: 数据文件4: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF'

坏块处理有3种通用的办法:

备份好用情况:

1  blockrecover

备份不可用情况:

2  dbms_repair.SKIP_CORRUPT_BLOCKS标记跳过坏块

3  Oracle 10231内部事件跳过坏块  exp导出数据

验证坏块,cmd窗口下执行

dbv file=D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF blocksize=8192 logfile='D:\dbv.log'

查询确定文件号和块号

select * from  v$database_block_corruption;

>rman target /

RMAN> blockrecover datafile 4 block 293465;

方法1:

出现ora-1578时,大多时候可以用过rman命令blockrecover datafile 4 block 293465from backupset;来恢复坏块,但有时候往往因为介质的损坏而无法修复,只能导出数据重新建表,此时exp或扫描表是无法正常的。

使用命令检查损坏的是否为普通数据。

SELECT tablespace_name, segment_type, owner, segment_name

FROM dba_extents

WHERE file_id = 4

and 293465 between block_id AND block_id + blocks - 1

方法2:

然后用10231该命令设置全表扫描时跳过坏块。

ALTER SYSTEM SET EVENTS='10231 trace name context

forever,level 10';

也可以alter session在session级中使用,然后通过

create table as select的方式来拯救数据(当然会有数据损失)。

比对问题表和新表数据条数,查看丢失数据条数

exp 导出新表数据

drop table t1 purge; 彻底删除问题表

imp导入新表数据,然后将其改名为问题表同名即可。

也可不创建新表,直接10231跳过坏块后exp导出问题表数据。

方法3:

另外一种方法是使用SKIP_CORRUPT_BLOCKS标记,方法为使用命令

SQL> alter session set db_file_multiblock_read_count=1;

SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('NEWDOCHNZZ','T_PATIENT_DOC_COLB');

SQL> create table abak as select * from T_PATIENT_DOC_COLB ; 收集剩下的信息。

最后清除这个标记。

SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('NEWDOCHNZZ','T_PATIENT_DOC_COLB',flags=>dbms_repair.noskip_flag);

关于坏块的metalink文档如下:

RELATED DOCUMENTS

-----------------

- TECH: Database Block Checking

Features

- Handling Oracle Block Corruptions in

Oracle7/8/8i/9i

- Handling Rollback Segment Corruptions in Oracle7.3 to 8.1.7

- Extracting Data from a Corrupt Table using

SKIP_CORRUPT_BLOCKS or Event 10231

- ORA-1578 ORACLE data block corrupted (file # %s, block #

%s)

- Parameter DIRECT: Conventional Path Export Versus Direct

Path

Export

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值