ORA-01578

ORA-01578
今天发生了ORA-01578 错误.以前没有碰到过。正好整理一下解决方案
1.什么是ORA-01578错误?
首先要说到ORACLE DATA BLOCK是以2进制格式的固定结构被写在数据文件里。是ORACLE的最小单位,物理数据块的大小由"init.ora" 参数确定DB_BLOCK_SIZE 被设置在数据库建立之时所定义.每一个被格式化的块都有一个块头和块尾.没有被格式化的块标记为0.每当一个块被读入数据缓冲区的时候,块内信息就要被检 测有效性,检测里包括通过ORACLE系统检测块的请求地址,如果是分裂的块,需要确定在块头和块尾的匹配信息。从硬盘上读, 如果发现信息不一致找不到块,也就是块地址对应不到块,就会发生ORA-01578的错误.通常会有文件号,和坏块号.
比如
ORA-01578: ORACLE data block corrupted (file # 9, block # 5496)
ORA-01110: data file 9: 'E:\ORACLE\ORADATA\M36TDB1\MON.ORA'
2.怎么样来确定坏块在哪里,是什么对象?
可以用这样的脚本
SELECT SEGMENT_NAME, SEGMENT_TYPE, OWNER
FROM SYS.DBA_EXTENTS
WHERE FILE_ID = <f>
AND <b> BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
其中<f>代表坏的文件号,<b>代表坏块号
3.如果是坏块在一个表,我们怎么样来恢复?
以下选择为解决非索引块存在不作为数据字典的部分表中
o 通过RMAN,最有效也是最安全的(推荐)
o 通过一个EXPORT的DMP文件从新导入.这样有可能存在数据丢失.
o 用10231诊断事件跳过坏块导出,后删除对象在导入,这样有可能存在数据丢失.
如果是数据字典表的话,最好请ORACLE服务支持的人。
4.如果是坏快在一个索引上,我们怎么样来恢复?
如果不是数据字典部分或者基表上不包含任何坏块,那么只要删除索引重新建索引.
如果是数据字典的索引,建议你通过你的备份文件里恢复.或者请ORACLE服务支持的人。
5.如果是坏块在回滚段上,我们怎么样来恢复?
建议你通过你的备份文件里恢复.或者请ORACLE服务支持的人。
6.什么情况下会产生坏块?
o 错误的I/O,H/W, Firmware
o 操作系统的I/O和CACHE问题
o 内存或者是分页问题
o 磁盘修复产生问题
o 部分数据文件被从写
o ORACLE系统不正确的访问没有被格式过的块
o ORACLE或者操作系统的BUG
下面来看一下今天产生的问题
系统在运行的时候报错,调试了一下存储过程发现一条DML语句不能执行了。
然后根据报错信息查找错误的根源
SQL> Select Owner, Segment_Name, Segment_Type, Tablespace_Name
2 From Dba_Extents
3 Where File_Id = 13 And 11768 Between Block_Id And Block_Id + Blocks - 1;
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
DLYX D_DFSFXX TABLE DFZW
SQL>
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>rman
恢复管理器: 版本9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
RMAN> connect target sys/oracle@cxdlyx;
连接到目标数据库: CXDL (DBID=1393743464)
RMAN> show all;
正在使用目标数据库控制文件替代恢复目录
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'c:\backup\ctl_
d_%T_%U_%F.bak';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\ORA92\DATABASE\SNCFCXDL.ORA';
# default
RMAN> blockrecover datafile 13 block 11768;
启动 blockrecover 于 21-2月 -06
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=23 devtype=DISK

通道 ORA_DISK_1: 正在恢复块
通道 ORA_DISK_1: 正在指定要从备份集恢复的块
正在恢复数据文件 00013 的块
通道 ORA_DISK_1: 已从备份段 1 恢复块
段 handle=C:\BACKUP\DB_CXDL_FULL_20060219.BAK tag=FULLBAK ON %T params=NULL
通道 ORA_DISK_1: 块恢复已完成
正在开始介质的恢复
完成介质的恢复
完成 blockrecover 于 21-2月 -06
RMAN>
关键在于从备份文件里恢复(红色字体).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值