查看: 349|回复: 6

[备份恢复] 无备份怎么进行坏块恢复?

[复制链接]
求职 : 数据库管理员
论坛徽章:
14
2013年新春福章
日期:2013-02-25 14:51:24秀才
日期:2017-09-18 17:33:21秀才
日期:2017-09-18 17:04:24秀才
日期:2017-08-18 11:04:35秀才
日期:2017-08-18 11:02:47秀才
日期:2017-03-28 15:59:38秀才
日期:2017-03-01 13:53:392017金鸡报晓
日期:2017-02-08 14:09:13秀才
日期:2015-09-06 10:19:32秀才
日期:2015-07-03 17:00:53
发表于 2020-10-16 14:21 | 显示全部楼层 |阅读模式
现有windows2019上的Oracle11.2.0.4,库为open状态,有两个数据文件有大量坏块,因为没有备份,想跳过坏块进行表数据导出。进行了两种尝试:1.设置ALTER SYSTEM SET EVENTS=’10231 trace name context forever,level 10’ ;
后select count(*) from table;依然报错ORA-01578 ORA-01110
查询到坏块为:

2.使用DBMS_REPAIR包,在DBMS_REPAIR.CHECK_OBJECT时也报错ORA-01578 ORA-01110


请问有什么好的方式能进行处理?


481d585483131e7d663b632d976b847.png
1602829199(1).jpg
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2020-10-16 15:47 | 显示全部楼层
你先确定坏快在什么segment上,如果在索引上,直接重建就可以

如果在表上,并且是段头,你设置啥都没用。

select /*+ full */  count(*) from table

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
14
2013年新春福章
日期:2013-02-25 14:51:24秀才
日期:2017-09-18 17:33:21秀才
日期:2017-09-18 17:04:24秀才
日期:2017-08-18 11:04:35秀才
日期:2017-08-18 11:02:47秀才
日期:2017-03-28 15:59:38秀才
日期:2017-03-01 13:53:392017金鸡报晓
日期:2017-02-08 14:09:13秀才
日期:2015-09-06 10:19:32秀才
日期:2015-07-03 17:00:53
 楼主| 发表于 2020-10-16 16:18 | 显示全部楼层
本帖最后由 weipeng415 于 2020-10-16 16:19 编辑
zergduan 发表于 2020-10-16 15:47
你先确定坏快在什么segment上,如果在索引上,直接重建就可以如果在表上,并且是段头,你设置啥都没用。sel ...

在table 上,也不是段头,所以挺纳闷的,加hint也没有用,试过了

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2020-10-16 16:53 | 显示全部楼层
我又看了一下文档:
1. 10231 / dbms_repair 只对 soft/logical corrupt有效
2. 表必须是堆表,不能是IOT

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
14
2013年新春福章
日期:2013-02-25 14:51:24秀才
日期:2017-09-18 17:33:21秀才
日期:2017-09-18 17:04:24秀才
日期:2017-08-18 11:04:35秀才
日期:2017-08-18 11:02:47秀才
日期:2017-03-28 15:59:38秀才
日期:2017-03-01 13:53:392017金鸡报晓
日期:2017-02-08 14:09:13秀才
日期:2015-09-06 10:19:32秀才
日期:2015-07-03 17:00:53
 楼主| 发表于 2020-10-16 17:37 | 显示全部楼层
zergduan 发表于 2020-10-16 16:53
我又看了一下文档:1. 10231 / dbms_repair 只对 soft/logical corrupt有效2. 表必须是堆表,不能是IOT

好的,谢谢!

使用道具 举报

回复
论坛徽章:
192
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
发表于 2020-10-16 19:55 | 显示全部楼层
select count(*) from table;
这样查询可能走的是索引.难道索引也有坏块.

理论讲设置
ALTER SYSTEM SET EVENTS=’10231 trace name context forever,level 10’ ;
select /*+ full(table)*/  count(*) from table;
应该可以跳过坏块.

还有一个方法使用bbed看看什么问题,也许能使用它修复,不过在windows下使用bbed有点麻烦,可以在linux下操作.

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2020-10-19 12:36 | 显示全部楼层
lfree 发表于 2020-10-16 19:55
select count(*) from table;这样查询可能走的是索引.难道索引也有坏块.理论讲设置ALTER SYSTEM SET EVENTS ...

lz说他已经试过了,我看文档上说 event和dbms_repair 只能针对soft corrupt有效,即 块头的 check码和块尾的check码是一致的,也就是说这个块不是因为write lost或者不是split block 这种corrupt才能修复。反之,是无法修复(跳过内容的)。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表