侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

一次简单的Oracle恢复Case实战记录

数据库  /  管理员 发布于 6年前   238

发现问题

某网友的数据库由于坏盘了,并且存储掉电,导致数据库无法open了。单看其数据库alert log的错误来看,是非常之简单的,如下:

Fri Oct 26 10:33:53 2018Recovery of Online Redo Log: Thread 1 Group 3 Seq 39 Reading mem 0Mem# 0: /fs/fs/oradata/orcl/redo03.logBlock recovery stopped at EOT rba 39.77.16Block recovery completed at rba 39.77.16, scn 0.1002048587ORACLE Instance orcl (pid = 8) - Error 600 encountered while recovering transaction (9, 30) on object 9149.Fri Oct 26 10:33:53 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_smon_192644.trc:ORA-00600: internal error code, arguments: [6856], [0], [43], [], [], [], [], []Fri Oct 26 10:33:56 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_smon_192644.trc:ORA-00600: internal error code, arguments: [4194], [33], [36], [], [], [], [], []Doing block recovery for file 2 block 713Block recovery from logseq 39, block 82 to scn 1002048595

对于这种错误,很明显,屏蔽回滚段即可,屏蔽之后可顺利打开数据库,不过后面很快又会crash掉,因此重建undo也就绕过这个问题了。

打开数据库之后,再去观察数据库,会发现alert log有不少的错误,如下所示:

Fri Oct 26 11:01:46 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_mmon_385148.trc:ORA-00600: internal error code, arguments: [17147], [0x110549070], [], [], [], [], [], []Fri Oct 26 11:01:46 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_m001_373218.trc:ORA-00600: internal error code, arguments: [kdddgb5], [196650], [0], [], [], [], [], []ORA-600 encountered when generating server alert SMG-4120Fri Oct 26 11:01:47 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_mmon_385148.trc:ORA-00600: internal error code, arguments: [KGHALO4], [0x11047F6F0], [], [], [], [], [], []ORA-600 encountered when generating server alert SMG-4121Fri Oct 26 11:01:48 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_mmon_385148.trc:ORA-00600: internal error code, arguments: [KGHALO4], [0x11047F6F0], [], [], [], [], [], []ORA-600 encountered when generating server alert SMG-4121Fri Oct 26 11:01:50 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_m001_373218.trc:ORA-00600: internal error code, arguments: [kdddgb5], [196650], [0], [], [], [], [], []Fri Oct 26 11:02:22 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_mmon_385148.trc:ORA-00600: internal error code, arguments: [17114], [0x110549070], [], [], [], [], [], []Fri Oct 26 11:02:23 2018Errors in file /fs/fs/oradata/admin/orcl/bdump/orcl_mmon_385148.trc:ORA-00600: internal error code, arguments: [kebm_mmon_main_1], [39], [], [], [], [], [], []ORA-00039: error during periodic actionORA-00600: internal error code, arguments: [17114], [0x110549070], [], [], [], [], [], []Fri Oct 26 11:03:30 2018Restarting dead background process MMON

除此之外,由于之外alert log有坏块报错,因此对system进行了dbv检查,发现确实存在少量坏块,如下:

DBVERIFY: Release 10.2.0.4.0 - Production on Fri Oct 26 10:37:20 2018 Copyright (c) 1982, 2007, Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = system01.dbf DBV-00200: Block, DBA 4255202, already marked corruptBlock Checking: DBA = 4258751, Block Type = KTB-managed data blockdata header at 0x11022a05ckdbchk: fsbo(596) wrong, (hsz 4178)Page 64447 failed with check code 6129Block Checking: DBA = 4259386, Block Type = KTB-managed data block**** kdxcofbo = 208 != 24---- end index block validationPage 65082 failed with check code 6401Block Checking: DBA = 4269609, Block Type = Unlimited data segment headerIncorrect extent count in the extent map: 16777317Block Checking: DBA = 4269612, Block Type = KTB-managed data block**** kdxcofbo = 224 != 216---- end index block validationPage 75308 failed with check code 6401Block Checking: DBA = 4269615, Block Type = KTB-managed data block**** actual rows locked by itl 2 = 1 != # in trans. header = 0---- end index block validationPage 75311 failed with check code 6401Page 85271 is influx - most likely media corruptCorrupt block relative dba: 0x00414d17 (file 1, block 85271)Fractured block found during dbv:Data in bad block:type: 6 format: 2 rdba: 0x00414d17last change scn: 0x0000.3afaf495 seq: 0x1 flg: 0x04spare1: 0x0 spare2: 0x0 spare3: 0x0consistency value in tail: 0xfe830601check value in block header: 0x96c6computed block checksum: 0x3c6b Page 85383 is influx - most likely media corruptCorrupt block relative dba: 0x00414d87 (file 1, block 85383)Fractured block found during dbv:Data in bad block:type: 6 format: 2 rdba: 0x00414d87last change scn: 0x0000.3b6b9d19 seq: 0x1 flg: 0x06spare1: 0x0 spare2: 0x0 spare3: 0x0consistency value in tail: 0x970f0601check value in block header: 0xe825computed block checksum: 0x3c6b DBVERIFY - Verification complete Total Pages Examined : 640000Total Pages Processed (Data) : 116312Total Pages Failing (Data) : 1Total Pages Processed (Index): 65914Total Pages Failing (Index): 3Total Pages Processed (Other): 64634Total Pages Processed (Seg) : 0Total Pages Failing (Seg) : 0Total Pages Empty : 393138Total Pages Marked Corrupt : 3Total Pages Influx : 2Highest block SCN : 1002028510 (0.1002028510)

这部分错误,其实处理起来也不困难,部分是业务表的index,但是其他的几乎都是AWR相关基表,有2个坏块跟是system相关的基表和索引,分别是I_H_OBJ#_COL#和COM$ ,HISTGRM$。

对于业务索引,很简单,直接drop 重建即可,对于这个sys的index,可以通过设置38003 event进行drop重建。

对于基表COM$,HISTGRM$,由于是非bootstrap$核心对象,其实也可以处理掉的。

处理方法

不过考虑到这种毕竟是存储掉电,undo异常的情况,还是重建库更稳妥一些。最后补充一点,这个库稍微有点奇葩的地方是全库1.2TB,其中有个表的LOB自动980GB,重建数据库是相对较慢的。对于大表,且有LOB自动,通常建议基于分片,否则会报ORA-01555错误的,如下是常用的一个基于rowid的分片脚本,供大家参考:

set verify off undefine rowid_ranges undefine segment_name undefine owner set head off set pages 0 set trimspool on select 'where rowid between ''' ||   sys.dbms_rowid.rowid_create(1, d.oid, c.fid1, c.bid1, 0) ||   ''' and ''' ||   sys.dbms_rowid.rowid_create(1, d.oid, c.fid2, c.bid2, 9999) || '''' || ';'  from (select distinct b.rn,       first_value(a.fid) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) fid1,       last_value(a.fid) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) fid2,       first_value(decode(sign(range2 - range1),1,a.bid +((b.rn - a.range1) * a.chunks1),a.bid)) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) bid1,       last_value(decode(sign(range2 - range1),1,a.bid +((b.rn - a.range1 + 1) * a.chunks1) - 1,(a.bid + a.blocks - 1))) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) bid2    from (select fid,       bid,       blocks,       chunks1,       trunc((sum2 - blocks + 1 - 0.1) / chunks1) range1,       trunc((sum2 - 0.1) / chunks1) range2      from (select /*+ rule */        relative_fno fid,        block_id bid,        blocks,        sum(blocks) over() sum1,        trunc((sum(blocks) over()) / &&rowid_ranges) chunks1,        sum(blocks) over(order by relative_fno, block_id) sum2        from dba_extents        where segment_name = upper('&&segment_name')        and owner = upper('&&owner'))      where sum1 > &&rowid_ranges) a,     (select rownum - 1 rn      from dual     connect by level <= &&rowid_ranges) b    where b.rn between a.range1 and a.range2) c,   (select max(data_object_id) oid    from dba_objects    where object_name = upper('&&segment_name')    and owner = upper('&&owner')    and data_object_id is not null) d /

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对AIDI的支持。


  • 上一条:
    Oracle固定执行计划之SQL PROFILE概要文件详解
    下一条:
    Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客