热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要给大家介绍了一次简单的Oracle恢复Case实战过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

发现问题

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

Fri Oct 26 10:33:53 2018
Recovery of Online Redo Log: Thread 1 Group 3 Seq 39 Reading mem 0
Mem# 0: /fs/fs/oradata/orcl/redo03.log
Block recovery stopped at EOT rba 39.77.16
Block recovery completed at rba 39.77.16, scn 0.1002048587
ORACLE Instance orcl (pid = 8) - Error 600 encountered while recovering transaction (9, 30) on object 9149.
Fri Oct 26 10:33:53 2018
Errors 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 2018
Errors 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 713
Block recovery from logseq 39, block 82 to scn 1002048595

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

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

Fri Oct 26 11:01:46 2018
Errors 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 2018
Errors 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-4120
Fri Oct 26 11:01:47 2018
Errors 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-4121
Fri Oct 26 11:01:48 2018
Errors 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-4121
Fri Oct 26 11:01:50 2018
Errors 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 2018
Errors 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 2018
Errors 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 action
ORA-00600: internal error code, arguments: [17114], [0x110549070], [], [], [], [], [], []
Fri Oct 26 11:03:30 2018
Restarting 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 corrupt
Block Checking: DBA = 4258751, Block Type = KTB-managed data block
data header at 0x11022a05c
kdbchk: fsbo(596) wrong, (hsz 4178)
Page 64447 failed with check code 6129
Block Checking: DBA = 4259386, Block Type = KTB-managed data block
**** kdxcofbo = 208 != 24
---- end index block validation
Page 65082 failed with check code 6401
Block Checking: DBA = 4269609, Block Type = Unlimited data segment header
Incorrect extent count in the extent map: 16777317
Block Checking: DBA = 4269612, Block Type = KTB-managed data block
**** kdxcofbo = 224 != 216
---- end index block validation
Page 75308 failed with check code 6401
Block Checking: DBA = 4269615, Block Type = KTB-managed data block
**** actual rows locked by itl 2 = 1 != # in trans. header = 0
---- end index block validation
Page 75311 failed with check code 6401
Page 85271 is influx - most likely media corrupt
Corrupt block relative dba: 0x00414d17 (file 1, block 85271)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x00414d17
last change scn: 0x0000.3afaf495 seq: 0x1 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xfe830601
check value in block header: 0x96c6
computed block checksum: 0x3c6b
 
Page 85383 is influx - most likely media corrupt
Corrupt block relative dba: 0x00414d87 (file 1, block 85383)
Fractured block found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x00414d87
last change scn: 0x0000.3b6b9d19 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x970f0601
check value in block header: 0xe825
computed block checksum: 0x3c6b
 
DBVERIFY - Verification complete
 
Total Pages Examined : 640000
Total Pages Processed (Data) : 116312
Total Pages Failing (Data) : 1
Total Pages Processed (Index): 65914
Total Pages Failing (Index): 3
Total Pages Processed (Other): 64634
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 393138
Total Pages Marked Corrupt : 3
Total Pages Influx : 2
Highest 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
 
/

总结

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


推荐阅读
  • 本文探讨了如何将个人经历,特别是非传统的职业路径,转化为职业生涯中的优势。通过作者的亲身经历,展示了舞蹈生涯对商业思维的影响。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • Bootstrap 插件使用指南
    本文详细介绍了如何在 Web 前端开发中使用 Bootstrap 插件,包括自动触发插件的方法、插件的引用方式以及具体的实例。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • Bootstrap 缩略图展示示例
    本文将展示如何使用 Bootstrap 实现缩略图效果,并提供详细的代码示例。 ... [详细]
  • 十三、实现模糊查询功能
    本文介绍了在index.jsp页面中实现模糊查询功能的具体步骤,包括添加必要的HTML元素和JavaScript代码。 ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Bootstrap 支持用户自定义样式调整。即使长时间未使用 Bootstrap,也可以通过添加新的 CSS 类或覆盖现有类来轻松修改默认样式,以满足特定的设计需求。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
author-avatar
林泳_钿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有