暂无图片
ORA-01578: ORACLE data block corrupted (file # 2, block # 511851) ,求解怎么修复
我来答
分享
暂无图片 匿名用户
ORA-01578: ORACLE data block corrupted (file # 2, block # 511851) ,求解怎么修复


--使用rman 检查
backup validate check logical database;



-- 查询corruption涉及的数据文件及block_id

SQL> select * from v$database_block_corruption;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
2 31340 3 1.1857E+10 CORRUPT
2 32587 1 1.1858E+10 CORRUPT
2 511849 5 1.1857E+10 CORRUPT
2 569136 8 1.1857E+10 CORRUPT

-- 查询文件及坏块包含的对象
select segment_name,partition_name,segment_type,owner,tablespace_name,block_id
from sys.dba_extents
where file_id=2
and &bad_block_id between block_id and block_id + blocks-1;

1 MGMT_METRICS_RAW_PK INDEX SYSMAN SYSAUX 31336
1 MGMT_METRICS_RAW_PK INDEX SYSMAN SYSAUX 511848
1 MGMT_METRICS_RAW_PK INDEX SYSMAN SYSAUX 569136


-- 查看涉及的表都是SYSMAN.MGMT_METRICS_RAW

-- 尝试查询表报错

SQL> select * from SYSMAN.MGMT_METRICS_RAW;
select * from SYSMAN.MGMT_METRICS_RAW
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 2, block # 31340)
ORA-01110: data file 2: '/mnt/vdb1/oracle/oradata/nip/sysaux01.dbf'


SQL>
-- 尝试分析表发现报错
SQL> ANALYZE TABLE SYSMAN.MGMT_METRICS_RAW VALIDATE STRUCTURE CASCADE;
ANALYZE TABLE SYSMAN.MGMT_METRICS_RAW VALIDATE STRUCTURE CASCADE
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 2, block # 511851)
ORA-01110: data file 2: '/mnt/vdb1/oracle/oradata/nip/sysaux01.dbf'


-- 查询删除主键报错

SQL> alter table SYSMAN.MGMT_METRICS_RAW drop primary key;
alter table SYSMAN.MGMT_METRICS_RAW drop primary key
*
ERROR at line 1:
ORA-25188: cannot drop/disable/defer the primary key constraint for index-organized tables or sorted hash cluster

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新
virvle

直接expdp导出也是报错的

暂无图片 评论
暂无图片 有用 0
打赏 0
范伟林

是否有备份,有备份可以从备份直接恢复坏块;若是逻辑坏块可以rman直接修复

暂无图片 评论
暂无图片 有用 0
打赏 0
virvle
2022-04-19
没有备份
virvle
2022-04-19
尝试过rman直接修复,提示没有备份
杨卓

是否有dg,数据库什么版本,dg的blocks也是坏块还是dg blocks是好的

暂无图片 评论
暂无图片 有用 0
打赏 0
virvle
2022-04-19
单实例,11.0.2.4版本
杨卓

https://developer.aliyun.com/article/675344
在Oracle11gr2版本之后,若搭建实时应用日志的物理备库,那么在主库数据文件少量坏块的情况下,可以利用ABCR技术快速修复坏块;
也就是说如果你有一个dg,并且主库blocks坏了,备库好的。 主库select count(*) 查询这个异常的表数据,oracle内部会自动将备库的好的块覆盖主库的。

如果没有办法使用这个功能看你都select,如果这个功能正常应该就自动修复了。11.2.0.4.0 版本自己可以确认一下

----------上述的不好使,另一种办法
1.找相同版本对索引进行重建,确认操作没问题;
2.使用oracle自己的insert blocks自动对blocks进行初始化;这个操作比较麻烦:

1)对索引rebuild,这个时候索引使用其它的blocks;
2)坏块的blocks处于free;
3)新建一个临时表,指定这个存在坏块的数据文件;
4)insert数据,直到写入到了坏块,这个时候自动触发oracle格式化,正常情况这个坏块就消失了;drop测试表。 坏块问题就处理完成了。

如果上述不行,数据库expdp,exp导出新库,换库吧规避system的对象坏块问题。

暂无图片 评论
暂无图片 有用 0
打赏 0
virvle
2022-04-19
1.找相同版本对索引进行重建,确认操作没问题;这个同版本都是一样的么? 2.无法对索引进行rebuild,请问insert blocks具体点是什么样操作
cqiwen
你好,根据你的描述,你可以使用DBMS_REPAIR识别并跳过损坏的块,然后就可以对那张表进行select查询了。然后重建损坏的索引即可解决。
暂无图片 评论
暂无图片 有用 0
打赏 0
virvle
2022-04-19
在进行第二步,检查坏块的是出现 SQL> exec dbms_repair.check_object('SYSMAN','MGMT_METRICS_RAW',corrupt_count=>:corr_count); BEGIN dbms_repair.check_object('SYSMAN','MGMT_METRICS_RAW',corrupt_count=>:corr_count); END; * ERROR at line 1: ORA-24123: feature IOT support is not yet implemented ORA-06512: at "SYS.DBMS_REPAIR", line 294 ORA-06512: at line 1
Rune悠然

你好,有试过move坏块所属的表吗?
准备一个设置ASSM的表空间比如test
alter table SYSMAN.MGMT_METRICS_RAW move tablespace test;
alter table SYSMAN.MGMT_METRICS_RAW move tablespace SYSAUX;
如果无法move报什么错?

还有一种麻烦的办法,就是跳过坏块建一张新表,下面给个帖子,
与你的案例有些相似,希望有帮助
http://t.askmaclean.com/thread-3655-1-1.html

暂无图片 评论
暂无图片 有用 0
打赏 0

我觉得这个问答能解决你的问题,思路是:建个备份表,然后根据比对两个表,删除原表异常的那行数据

http://t.askmaclean.com/thread-3655-1-1.html

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
在oracle的cdp创建个普通用户,想分配查询Pdb的数据字典需要哪些权限?
回答 1
和11g分配数据字典权限一样,后面加上containerpdb1
有什么方式可以查询正在执行的ORACLE sql语句?
回答 2
根据SID,获取正在执行的sql,参考示例:DECLARECURSORcursql(ppresqladdrVARCHAR2)ISSELECTt.sqltextFROMv$sqltextwithnewl
为什么有的公司不允许在Oracle数据库中用left join,只给用 a.id = b.id(+) ,这是什么原因?
回答 8
是不是说反了,感觉leftjoin更通用。。。。。。
Oracle排序某个字段, 如果这个varchar2类型的字段有数字也有文字 , 怎么按照数字大小排序?
回答 2
已采纳
用正则关系式来实现selectfromtablenameorderbytonumber(translate(id,'0123456789.'||id,'0123456789.'))ascnullsla
求一份Oracle备份恢复的视频
回答 2
有本书叫《临危不惧oracle11g数据库恢复技术》看视频太慢,不如看书,然后自己做实验理解
Oracle存储层次体系是怎样的?
回答 1
已采纳
Oracle数据库由一个或多个表空间构成。表空间(tablespace)是Oracle中的一个逻辑存储容器,位于存储层次体系的顶层,包括一个或多个数据文件。存储层次体系如下:(1)数据库由一个或多个表
日常开发dba工作有什么呢?
回答 2
已采纳
作为日常开发和运维数据库管理员(DBA),以下是一些常见的任务和责任:数据库安装和配置:安装数据库服务器软件,并进行必要的配置,例如设置内存、存储路径、网络连接等。数据库备份与恢复:定期备份数据库以保
Oracle在缓冲区缓存中如何管理块?
回答 1
已采纳
Oracl缓冲区缓存中的块实质上在一个区域上管理,但有两个不同的列表指向这些块。脏(dirty)块列表,其中的块需要由数据库块写入器(DBWn)写入磁盘。非脏(nodirty)块列表。在Oracle8
centos7.6 安装oracle12c 12.1版本的RAC后出现了很多漏洞
回答 1
这些大部分都跟数据库没关系啊,第三方等保软件扫出来的应该都有提示或者链接解决方式的。
oracle安装缺失ggc包
回答 7
已采纳
看报错是包的依赖关系乱了,麻烦点就把所有依赖包卸载重新安装,简单干净点就把系统重装了,重新安装